blog.vararu.org

let javascript = haskell?


Today I found myself reading some JavaScript code and thinking, have I not seen this before?

let square = x => x * x;

I reinstalled ghc and threw it in ghci for giggles:

➜  ~  ghci
GHCi, version 7.8.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> let square = x => x * x;

<interactive>:2:16: parse error on input ‘=>’
Prelude>

That's no fun. What was the correct syntax, though? Oh, right:

Prelude> let square x = x * x
Prelude> square(2)
4

Let's just view those side by side, harmless whitespace added for emphasis:

let square = x => x * x;
let square   x =  x * x

So, if you remove "optional" (*cough* arguably not optional) lexical tokens such as the semicolon and the fat arrow parantheses, you'll find that ES6 can be within a Levenshtein distance of 2 characters from Glorious Glasgow Haskell.

Come to think of it, it could also be distance 0. Praise let!

let number = 42;

Here's another similarity:

➜  ~  node
> 0.1 + 0.2
0.30000000000000004

➜  ~  ghci
Prelude> 0.1 + 0.2
0.30000000000000004

Can we keep going?

➜  ~  node
> ["10", "10", "10"].map(parseInt)
[ 10, NaN, 2 ]

➜  ~  ghci
Prelude> map (read :: String -> Int) ["10", "10", "10"]
[10,10,10]

Eh, I'm confident Haskell will eventually catch up.