Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Syntax looks very clean, but probably more like CoffeeScript mixed with Ruby. "Inspired by Haskell" is going a bit far. You took pattern matching and `where` and none of the semantics.

Object patterns are absolutely awesome. Every OOP/FP hybrid ought to have that. Especially if you're not going to support algebraic data types. That point is worth bringing up, though: are they missing because of the presents of objects? I'm concerned about the interaction between pattern matching, duck typing and Java's static typechecker. Based on a quick glance, it's hard to see what that interaction is going to be like. At the very least, it does raise the question: what makes the pattern matching on lists and other built-in types special? In Haskell, for example, there's nothing magic about the cons operator and lists; it's just regular pattern matching on algebraic types.

I suspect your magic Nothing type is also necessary to make object pattern matching powerful, and I have some concerns about this kind of null safety. I wonder if programs are going to wind up turning into "gray goo" of Nothing, and what the debug scenario is for that case.

Exception handling looks a bit odd to me. Maybe it all works out in the end, but it looks like you're going to wind up with code like this:

    foo(x) except handler
      where
        handler(e) => 
          IOException : e.stuff
          ...
I think this is going to wind up being a bit gassy for local exception handling, where in Java you would see something like this, that avoids the intermediate name:

    try {
      foo(x);
    }
    catch (IOException e) {
      e.stuff
    }
    ...
Is it going to look better with closures?

    foo(x) except @(e) -> {
      IOException : e.stuff
      ...
    }
It's probably fine, but I dunno, most languages use more syntax in this area.

Overall, this is fairly impressive. It looks a bit like the greatest hits of Ruby and ML. The JVM has been host to a surprising number of interesting languages lately, and this is clearly one of the better recent offerings. Definitely worth a deeper look.



All the major OOP/FP I know support matching on objects. It is indeed a very powerful feature. See active patterns and extractors.


You must mean Scala and F#, which I haven't used. Haven't seen this feature in OCaml or Clojure.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: