Having spent time working in a number of functional languages in addition to Erlang such as Haskell, Scheme, Lisp, OCaml and others, there are many nice features of those languages that would increase expressivity of Erlang. In my case, having spent a couple of years working in Haskell before returning to the RabbitMQ fold, all sorts of features are “missing”, such as laziness, type classes, additional infix operators, the ability to specify precedence of functions, fewer parenthesis, partial application, more consistent standard libraries and do-notation. That’s a fair list, and it’ll take me a while to get around to implementing them all in Erlang, but here are two for starters.
'Cut' is a lightweight syntax for abstracting over expressions with holes in them. Similar to partial application, it permits implicit lambda abstraction without the line-noise of `funs'.
'Do' introduces Haskell's do-notation to Erlang together with an extensible implementation of monads.
Together, these extensions can be used to write code that is clearer of intent, more legible and maintainable than would otherwise be the case.