• en

OCaml Planet

The OCaml Planet aggregates various blogs from the OCaml community. If you would like to be added, read the Planet syndication HOWTO.

921 blog posts are available. You can read the 30 more recent ones below or view older ones.

Full Time: FPGA Engineer at Jane Street in New York, NY; London, UK — GitHub Jobs, Aug 17, 2017

Jane Street is looking to hire an engineer with experience in both software and hardware design to work on FPGA-based applications, and on tools for creating such applications.

We're big believers in the ability of tools to make programming faster, more pleasant, and more reliable. We think the same is true for hardware design, and we're looking for people with real world experience in hardware design who are interested in using programming language technology to improve the process of designin…


Batteries 2.7.0 released — OCamlCore Forge News (Gabriel Scherer), Aug 17, 2017

This minor release is the first to support OCaml 4.05.0. See the full release notes at https://github.com/ocaml-batteries-team/batteries-included/releases/tag/v2.7.0

Transpose — Shayne Fletcher, Aug 12, 2017


If we are to represent a row of a matrix as a list of numbers, then a matrix can naturally be represented as a list of lists of numbers.

The transpose of a matrix $\mathbf{A}$ is a new matrix denoted $\mathbf{A^{T}}$. The traditional mathematical definition of $\mathbf{A^{T}}$ is expressed as saying the $i$ th row, $j$ th column element of $\mathbf{A^{T}}$ is the $j$ th row, $i$ th column element of $\mathbf{A}$:


Full Time: Software Developer (Functional Programming) at Jane Street in New York, NY; London, UK; Hong Kong — GitHub Jobs, Aug 10, 2017

Software Developer

Jane Street is a proprietary quantitative trading firm, focusing primarily on trading equities and equity derivatives. We use innovative technology, a scientific approach, and a deep understanding of markets to stay successful in our highly competitive field. We operate around the clock and around the globe, employing over 500 people in offices in New York, London and Hong Kong.

The markets in which we trade change rapidly, but our intellectual approach changes faster still…


frama-clang 0.0.3, compatible with Frama-C 15 is out. Download ithere. — Frama-C, Aug 02, 2017

A New Implementation of Git — OCaml Labs, Jul 27, 2017

Displaying his own true sense of style, Romain Calascibetta added an incredibly detailed (and hilariously funny) PR for integrating his new Git implementation into ocaml-git - using the new implementation!

For the last ~6 months, Romain has been working hard to improve ocaml-git: decoding/encoding PACK files; implementing the git gc command; git push; and HTTP protocol.

He is currently integrating this work into the existing ocaml-git implementation using a bottom-to-top method, and as the new…


Coq 8.6.1 is out — Coq, Jul 25, 2017

Version 8.6.1 of Coq is available. It fixes several bugs of version 8.6. More information can be found in the CHANGES file. Feedback and bug reports are extremely welcome.

Major Releases of Cohttp, Conduit, DNS and TCP/IP Libraries — OCaml Labs, Jul 19, 2017

Whilst porting a large portion of Mirage libraries to use Jbuilder, the MirageOS core team realised it was also a great opportunity to reorganise the package structure of some specific libraries, update/remove old code and improve overall functionality.

Many of the new releases include popular libraries used by projects other than MirageOS, and the maintainers have helpfully provided details on what has changed, specific improvements and adjustments users will need to make in order to use them.…


OCaml EFL 1.19.0 released and migration to GitHub — OCamlCore Forge News (Alexis Bernadet), Jul 13, 2017

Moved to version 1.19 of the EFL. Like the previous version, only version 1.8 and higher of the EFL and Elementary are required to build this version of OCaml EFL. This is probably the last version of OCaml EFL released on OCaml Forge. This project will migrate to GitHub: https://github.com/axiles/ocaml-efl

OCaml 4.05.0 Released — OCaml Labs, Jul 13, 2017

Following some minor releases in the last month, OCaml 4.05.0 was released today and is available as an opam switch, or from source.

The release comprises over 130 changes, with a few breaking existing programs. General changes include language optimisations, runtime and type system improvements, bug fixing and some internal compiler-libs alterations.

More specifically, the OCaml manual has been updated, with dead links removed and a new document detailing how to contribute upstream, and there…


Provisioning, deploying, and managing virtual machines — Hannes Mehnert (hannes), Jul 10, 2017

How to deploy unikernels?

MirageOS has a pretty good story on how to compose your OCaml libraries into a virtual machine image. The mirage command line utility contains all the knowledge about which backend requires which library. This enables it to write a unikernel using abstract interfaces (such as a network device). Additionally the mirage utility can compile for any backend. (It is still unclear whether this is a sustainable idea, since the mirage tool needs to be adjusted for every ne…


How I found a bug in Intel Skylake processors — GaGallium (Xavier Leroy), Jul 03, 2017

Instructors of "Introduction to programming" courses know that students are willing to blame the failures of their programs on anything. Sorting routine discards half of the data? "That might be a Windows virus!" Binary search always fails? "The Java compiler is acting funny today!" More experienced programmers know very well that the bug is generally in their code: occasionally in third-party libraries; very rarely in system libraries; exceedingly rarely…


OCaml server-side developer at Ahrefs (Full-time) — Functional Jobs (FunctionalJobs.com), Jun 30, 2017

What we need

Ahrefs is looking for a backend developer with a deep understanding of networks, distributed systems, OS fundamentals and taste for simple and efficient architectural designs. Our backend is implemented mostly in OCaml and some C++, as such proficiency in OCaml is very much appreciated, otherwise a strong inclination to intensively learn OCaml in a short term will be required. Understanding of functional programming in general and/or experience with other FP languages (F#,Haskell,S…


Intel Hyper-Threading Bug Uncovered by OCaml Developers — OCaml Labs, Jun 26, 2017

The OCaml community has helped uncover a serious microcode defect on Intel Skylake and Kaby Lake processors with hyper-threading enabled. Debian have issued a security advisory encouraging users of systems with the affected processors to apply the BIOS/UEFI update, or disable hyper-threading.

Related issues have been under investigation since 2016, when OCaml developers began experiencing unpredictable behaviour when using the Intel Skylake and Kaby Lake CPUs. As detailed on the Mantis issue, t…


OCaml 4.04.2 released — Caml INRIA, Jun 23, 2017

Unicode 10.0.0 refresh — Daniel Bünzli, Jun 21, 2017

Uucd, Uucp, Uunf and Uuseg were refreshed for Unicode 10.0.0. Find the details via the software page.

Unsigned Integers as Built-In Types or as a Library? — OCaml Labs, Jun 15, 2017

Jeremy Yallop has submitted an extensive PR to add support for unsigned 32-bit and 64-bit integers. This feature is frequently requested, and the PR details the motivation behind the addition of primitive types, standard library modules, syntax for expressions and patterns, as well as suggesting ideas for future enhancement.

Unsigned integers could be added as built-in OCaml types, and Jeremy describes the advantages of doing so over adding them as a library. The features will help improve a va…


New in libguestfs: Rewriting bits of the daemon in OCaml — Richard Jones, Jun 04, 2017

libguestfs is a C library for creating and editing disk images. In the most common (but not the only) configuration, it uses KVM to sandbox access to disk images. The C library talks to a separate daemon running inside a KVM appliance, as in this Unicode-art diagram taken from the fine manual:

 │ main program      │
 │                   │
 │                   │           child process / appliance
 │                …

A Week of Platform Releases: Odig, Odoc, Opam Bundle and More! — OCaml Labs, May 31, 2017

Every year, May and June bring a hive of activity to the Computer Lab, and 2017 is no exception!

Our group is becoming more distributed across the globe, and we’ve taken extra steps to encourage communication by adopting the open-source Discourse forum for OCaml. The forum has become very active very quickly, and includes beginner questions, platform discussion and announcements of new releases.

It’s always fun bringing together OCaml contributors from all over the world to discuss their p…


Frama-C 15 - Phosphorus is out. Download ithere. — Frama-C, May 30, 2017

A modular formalization of type theory in Coq — Andrej Bauer, May 29, 2017

Here are the slides for the talk I just gave at TYPES 2017 in Budapest. It is joint work with Philipp Haselwarter and Théo Winterhalter. The abstract for the talk is available online.

It describes a complete formalization of dependent type theory which allows you to turn various features of type theory on and off, and it proves several basic formal theorems.

GitHub repository: formal-type-theory
Slides: TYPES 2017  – A modular formalization of type theory in Coq [PDF]

Why Jbuilder? Demonstration and Discussion — OCaml Labs, May 26, 2017

Yesterday we welcomed attendees from Docker, Microsoft Research (MSR), Barclays, OCaml Labs, Jane Street and Citrix to a Jbuilder discussion and demonstration. This is the first informal Tech Talk of a possible future series at Docker, and we experimented with live remote access and video recording. Huge thanks to the Docker team for providing the venue and Zoom!

Another build system?!

It’s well known that OCaml has more than a few existing build systems and associated tools (ocamlbuild, jen…


More type classes in OCaml — Shayne Fletcher (Evelgren), May 22, 2017

More type classes in OCaml

More type classes

Author: Joel Björnson

About the author: Joel has been enjoying functional programming ever since being introduced to Haskell at Chalmers University (Sweden). Since then he's been dabbling in F# and more recently OCaml. He's currently based in London, working at the intersection of functional programming and finance.

As demonstrated in previous articles on this blog, OCaml comes with a rich module system. Among other things it enables developers to …


OCaml Compiler Hacking May 2017 - Activity Summaries — OCaml Labs, May 19, 2017

We held the 17th Compiler Hacking Event this week, on a balmy Cambridge evening, and we’ve added summaries of what everyone was working on that evening including:

  • Meeting the group from Citrix working with Opam, some of whom are quite new to OCaml
  • Closing OCaml PRs, reviewing code and bug fixing
  • Getting stuck into Multicore!

We added some new projects to the “Things to Work On” list, and we will continue to update the projects over the coming weeks. There’s lots of interest in …


Opam 2.0.0 beta 3 — OCaml Labs, May 17, 2017

This beta 3 release brings speed and stability improvements, replaces the opam build command with opam install <dir>, provides a clearer interface for handling package test and doc dependencies, and extends the CLI in a few areas.

Originally opam build was added to:

  • provide an easier way to start projects without a pre-existing opam installation
  • allow direct interaction with projects in a current directory
  • copy installed files of a package below a specified destdir

Feedback high…


Proving a mem/map property — Shayne Fletcher, May 11, 2017

Here are two well known "classic" functions over polymorphic lists.

map f l computes a new list from l by applying f to each of its elements.

let rec map (f : 'a -> 'b) : 'a list -> 'b list = function
| [] -> []
| h :: t -> f h :: map f t

mem x l returns true is x is an element of l and returns false if it is not.

let rec mem (a : 'a) : 'a list -> bool  = function
| [] -> false

New opam features: more expressive dependencies — OCamlPro, May 11, 2017

This blog will cover yet another aspect of the improvements opam 2.0 has over opam 1.2. It may be a little more technical than previous issues, as it covers a feature directed specifically at packagers and repository maintainers, and regarding the package definition format.

Specifying dependencies in opam 1.2

Opam 1.2 already has an advanced way of specifying package dependencies, using formulas on packages and versions, with the following syntax:

depends: [
  "foo" {>= "3.0&q…

Preprocessor extensions for code generation — Shayne Fletcher, May 04, 2017


Preprocessor extensions for code generation

"A Guide to Extension Points in OCaml"[1] provides a great "quick-start" on using the OCaml extension points API to implement preprocessor extensions for abstract syntax tree rewrites. This post picks up where that tutorial leaves off by showing how to write a ppx that does code generation.

The problem treated here is one posed in Whitequark's blog : "Implement a syntax extension that would accept type declarations of …


New opam features: “opam install DIR” — OCamlPro, May 04, 2017

After the opam build feature was announced followed a lot of discussions, mainly having to do with its interface, and misleading name. The base features it offered, though, were still widely asked for:

  • a way to work directly with the project in the current directory, assuming it contains definitions for one or more packages
  • a way to copy the installed files of a package below a specified destdir
  • an easier way to get started hacking on a project, even without an initialised opam

Status of opam …


What do you mean ExceptT doesn't Compose? — Erik de Castro Lopo, Apr 30, 2017

Disclaimer: I work at Ambiata (our Github presence) probably the biggest Haskell shop in the southern hemisphere. Although I mention some of Ambiata's coding practices, in this blog post I am speaking for myself and not for Ambiata. However, the way I'm using ExceptT and handling exceptions in this post is something I learned from my colleagues at Ambiata.

At work, I've been spending some time tracking down exceptions in some of our Haskell code that have been bubbling up to the top level…


View older blog posts.