Noam Lewis made me. Blog.

Infernu Ongoing project.

Type inference and checking for a safer JavaScript.

Read the introductory blog post.


  • Full type inference: no type annotations neccessary.
  • Parametric polymorphism (aka "generics"), based on Hindley-Milner type inference.
  • Row-type polymorphism, otherwise known as "static duck typing".
  • Recursive types for true representation of object-oriented methods.
  • Correct handling of JS's this dynamic scoping rules.

Support for type annotations for specifically constraining or for documentation is planned. Polymorphism is value restricted, ML-style. Equi-recursive types are constrained to at least include a row type in the recursion to prevent inference of evil recursive types.


Convert yer big ol' XML files to newfangled JSON. Main feature: very low memory usage, which makes it suitable for big XML files. Haskell

Want fancy features? Try xml-to-json instead (good for small files). The not-fast version of xml-to-json has the following extra features:

  • Prune/filter the xml part to convert to json.
  • Simplify the structure to make it nicer JSON (at the cost of reversibility).
  • Output nicely formatted JSON.
  • Output results in a top-level JSON array.


A toy traffic simulator, in Javascript.

Each car is individually simulated, with driver "personalities".

Older stuff.

PopSimple (with Hadas Nahon) Alas, not mobile-friendly.

A web-based UI for "throwing stuff on a page and sharing it." Allows adding rich formatted text, images, videos, maps, a drawing canvas, and other goodies. No login, no social network membership, no plugins.

Blog post about PopSimple.

Source code (built using GWT)

Haskell-controlled robot

The robot that chases people to teach them Haskell.

I gave a talk about cv-combinators at the NYC-Haskell meetup group.

I wrote a number of Haskell libraries to get it to work:

  • HOpenCV: Haskell bindings for the OpenCV computer vision library. There is also this major fork (I have nothing to do with it).
  • cv-combinators: Functional combinators for computer vision, using OpenCV as a backend
  • RMP: Haskell bindings to code that controls a Segway RMP
  • allocated-processor: For wrapping resources in a pure API. Because once, there was no ResourceT (or similar packages).

There is this beautiful poster too.


A semantic graph editor.

It has a precise denotational design, and an old project page.

LiveC (with Eyal Lotem, 2007)

With Eyal Lotem. LiveC was a "semantic code editor" (very basic prototype). It is the ancient precursor to the modern Lamdu, a major ongoing project by Eyal Lotem and Yair Chuchem.

Original funky python version. Check the livec directory in the "stable" branch.

Features include:

  • Editing affects an in-memory AST directly.
  • AST-based versioning, which makes textual version control irrelevant.
  • Basic refactoring tools, such as renaming. They were very easy to implement due to the AST-centric design.