• compiled
  • garbage collected
  • type inference
  • well-defined safe language subset
  • direct pointer access within unsafe blocks
  • pretty syntax w/significant whitespace
  • strict evaluation by default
  • optional lazy bindings
  • exceptions
  • dependent types
  • pattern matching
  • first class patterns
  • extensible syntax via macros
  • support for functional programming style
    • functional collections
    • records, products, tagged sums, type aliases, GADTs
    • curried function/method parameters
  • support for oo programming style
    • type structure based on vObj
    • reified types and subtype relationships
    • recursive type definitions allowed in the same compilation unit
    • support for named/optional parameters
  • support for design by contract
    • first-class modeling of programmer intent with compile-time checking
    • clean segregation of interface and implementation when desired
    • fine-grained control of effects
    • fine-grained control of mutability
    • purity annotations
  • dynamic scoping
    • implicit parameters
    • implicit methods
    • sufficiently powerful to implement type classes


Different FFI modules will be available depending on the compilation mechanism. There is no analog to JNI here. All interop is done within the language itself, like P/Invoke.

  • C ffi for clr (implemented via p/invoke)
  • C ffi for native
  • jvm ffi for jvm
  • jvm ffi for dex
  • clr ffi for clr
  • js ffi for js


  • fast compiler
  • compiles to: jvm, clr, native, dex, js
  • targets: win/mac/linux/android/ios/web
  • repl and interpreter
  • in-browser dev environment
Comments powered by Disqus