* https://github.com/natefaubion/purescript-variant (open variant types)
* https://github.com/natefaubion/purescript-run (extensible effects implementation based on purescript-variant)
* https://github.com/ajnsit/purescript-concur (time-reifying UI framework, there's also a Haskell and a JS implementation of Concur)
* https://github.com/arthurxavierx/purescript-comonad-ui-todos (comonadic UIs)
* https://github.com/paf31/purescript-purview (incremental lambda calculus UI library, this is mind blowing!)
* https://github.com/paf31/purescript-sdom (declarative diff-less UI library)
There's also [0], a mature UI framework used in production at Slamdata. Lumi [1] are writing their frontend in Purescript.
What I especially like about Purescript is that the community is open to experimentation, while at the same time not being afraid to backtrack when things turn out to be a bad idea, like the row tagged Eff monad. The recent addition of QualifiedDo is a good example of this, which allows you to rebind >>= in the following manner:
test :: forall m a. I.IxMonad m => m a a String
test = I.do
a <- I.pure "test"
b <- I.pure "test"
I.pure (a <> b)
Imo, there simply is no better way for a Haskeller to target JS at the moment.