Pros:
- All the Joys of functional programming .
- Once you satisfy the compiler you can be fairly sure that code will just work.
- FRP saves you from callback hell.
- Fairly easy Javascript Integration via Ports( also see con on this)
- Time traveling debugger ( see con about this)
- Active mailing list.
- Automatic package versioning which more or less works for the most part
- Pure render function ( popularized by ReactJS), makes writing/debugging UI's trivial and painless.
- "Concurrent" FRP
Cons:
- Javascript integration is very and tedious. You have to declare all your ports in main which breaks abstractions. There is "secret" way of integration via Native modules but this will break if compiler changes ( which does quite often ).
- Debugger/reactor won't work if you have ports, basically all non trivial apps.
- All the ui components have to be reimplemented since stuff like jqueryui/webcomponents don't work ( react suffers from this also)
- No support for isomorphic apps, its a client side only tech.
- Can't do code splitting. Compiler generates one big blob of js.
- Constantly changing terminology ( eg: mailbox)
- IDE's/code editors are on the same level as dynamic languages i.e no code completion, refactoring ect.