Psellos
Contemporary Development With Functional Programming

OCaml Programming

In recent years we’ve done most of our development in the functional programming language OCaml. It has power, flexibility, static type safety, and is compiled to efficient native code. The OCaml home page is www.ocaml.org.

We’ve found that OCaml’s object-oriented subsystem makes it especially useful when interfacing to existing OO libraries (like most GUI libraries in use today).


Schnapsen/66

Cassino

Our two released apps for iOS, Master Schnapsen/66 and Cassino, are written entirely in OCaml—aside from the necessary iOS interface layer. If you need to be convinced that OCaml actually works on iOS, try them out. Not only will you be convinced, you might also enjoy them—they’re classic card games, and our apps make challenging opponents.

On this page we offer resources for programmers who are interested in using OCaml on iOS. We always have new projects in the works, and will add them here when they’re ready.

Note: The OCaml-to-iOS and OCaml-to-iOS-Simulator cross compilers are currently based on OCaml 4.01.0, and work with iOS 7. We’re updating the example apps to iOS 7, starting with the simplest.

Compilers and Libraries

OCaml on iOS

We modified OCaml 4.01.0 into an iOS cross compiler—it compiles OCaml to run as a native app on iOS devices (iPhone, iPod Touch, iPad). You can download a prebuilt compiler for iOS. If you want to build the compiler yourself, you can read the instructions for building from source.

OCaml on iOS Simulator

We also modified OCaml 4.01.0 into an iOS Simulator cross compiler— it compiles OCaml to run as an app in the iOS Simulator available from Apple. This is a great way to experiment with iOS OCaml programming—you don’t need a device, and don’t need to register with Apple as an iOS developer. And it’s a convenient development environment even for registered iOS developers.

You can download a prebuilt compiler for the iOS Simulator. If you want to build the iOS Simulator compiler yourself or test the prebuilt one, you can read the instructions for building and testing the compiler.

OpenGL ES from OCaml

We have created an OCaml interface to OpenGL ES, by adapting the LablGL interface created by Jacques Garrigue. We’re calling it LablGLES for short. OpenGL ES is a reduced version of OpenGL, for doing graphics on small devices like the iPhone and iPad. Read the detailed instructions for building LablGLES.

Example Apps

These are full OCaml iOS apps that you can build from source, then run on an iOS device or in the iOS Simulator. To keep things simple we’ve packaged some of them for iOS devices and some for the iOS Simulator. The iOS Simulator apps are also available in binary form; you can just download the binary and run in the simulator. Click on the images below to go the the full page for an app.

Apps Packaged for iOS Devices

These apps are packaged to run on iOS devices (iPhone, iPod Touch, iPad). You can download the sources for an app and build it with Xcode. Then you can run it on your development devices.

Portland: Which Way Is Up?

Portland is a very simple iOS app that shows which side of the iOS device is facing up. The name is a combination of portrait and landscape.

Slide24: Sliding Tile Puzzle

Slide24 is a more realistic OCaml iOS app that has real GUI elements and animation. It plays the well known 5 x 5 sliding tile puzzle, and will solve it for you using heuristic AI techniques.

IcosaBlue: OpenGL ES Icosahedron

IcosaBlue uses LablGLES to display a rotating blue icosahedron. This app is also packaged for the simulator.

Apps Packaged for iOS Simulator

These apps are packaged to run in the iOS Simulator. You can download sources for an app and build with Xcode. Then you can run it in the Simulator. You can also download a prebuilt binary and execute it immediately in the Simulator.

Gamut: Color Browser

Gamut shows a changing display in all the possible colors, depending on where you touch the screen.

Voronoi: Cells of Influence

Voronoi displays cool pictures based on colored Voronoi diagrams that you can modify dynamically through the touch interface.

IcosaBlue: OpenGL ES Icosahedron

IcosaBlue uses LablGLES to display a rotating blue icosahedron. This app is also packaged for iOS devices.

Archives

Earlier versions of these binaries, patches, and sources are available in our OCaml Programming Archives.