
Developing Web Applications with Haskell - corey
https://docs.google.com/presentation/d/10m9zTl3Lir68VsT-yV_Ke-hvBBuq7Lj08WQ-yxElIKg
======
mark_l_watson
That is a good summary of the options for Haskell web development. The author
of this slide deck also wrote "Beginning Haskell." I bought this book and like
it. That said I have an addiction to buying Haskell books :-) Personally, I
use Yesod for complicated apps, otherwise Spock.

~~~
akurilin
That was definitely a good book, would recommend it as well.

~~~
codygman
I'll also chime in and say the same. I've been meaning to go back and complete
the exercises I couldn't at first.

I almost got stuck not reading on because I couldn't figure out how to do some
exercises but I'm glad I didn't because hindsight shows me that would have
been a mistake.

~~~
sivers
Based on your recommendations, just now, I went to go check out the book and
found they're having a one-day half-price sale on it at Apress, the
publishers:

[http://www.apress.com/9781430262503?gtmf=s](http://www.apress.com/9781430262503?gtmf=s)

Nice timing. Buying now. Thanks for the tip.

------
spectrum1234
I'm somewhat new to web dev and new to functional programming. Can someone
tell me how this is fundamentally different that ClojureScript + OM
([https://github.com/omcljs/om](https://github.com/omcljs/om)) ?

~~~
birdsbolt
Fundamentally, I guess the difference is that one is type-safe, and the other
isn't.

You can get compile time errors instead of runtime for bunch of things.

~~~
dllthomas
ClojureScript also, I think, has a better front-end story for squishier front
ends at the moment (although there are a number of projects working on
changing that).

------
orionblastar
It looks like a good start. I've been trying to learn Haskell and F Sharp and
other functional languages and always wondered if there was a web option.

~~~
yogthos
Suave.io for F# is very nice [http://suave.io/](http://suave.io/)

------
15155
I'd like to see something like this, but with JSON-based APIs instead of HTML
templating.

~~~
codygman
You'd like servant:

[http://haskell-servant.github.io/tutorial/#tutorial](http://haskell-
servant.github.io/tutorial/#tutorial)

------
crimsonalucard
What's the most rails or django-esque framework for haskell?

~~~
kyllo
Yesod.

------
amelius
Does it support a "React" style of building web applications?

~~~
codygman
Don't forget about reflex[0], you can try it here[1].

I also use purescript[2] with purescript-halogen[3] as does slamdata[4].
There's also a video on Purescript halogen[5] that's very interesting.

Purescript is great because the JavaScript it generates is _so_ readable, that
if you really need to you can understand the output and make micro-
optimizations.

0:
[https://github.com/ryantrinkle/reflex](https://github.com/ryantrinkle/reflex)

1: [https://github.com/ryantrinkle/try-
reflex](https://github.com/ryantrinkle/try-reflex)

2: [http://purescript.org/](http://purescript.org/)

3: [https://github.com/slamdata/purescript-
halogen](https://github.com/slamdata/purescript-halogen)

4: [http://slamdata.com/](http://slamdata.com/)

5: [https://www.youtube.com/watch?v=AbDX-
wRigAo](https://www.youtube.com/watch?v=AbDX-wRigAo)

~~~
michaelochurch
Thanks for the links! I'm really curious about what Haskell can come up with
for a front-end story.

Do you think that Purescript's row typing (as seen in records and the Eff
monad/effect system) is a viable replacement for monad transformer stacks? I
"get" MT stacks but I find them heavyweight when what is most often desired is
commutative set building of capabilities rather than MT-style stacking.

~~~
tel
Consider mtl then. It provides commutative capability set building semantics
from the user's POV and then only asks the consumer to make final stack-
ordering/effect specification decisions.

~~~
dllthomas
I find mtl pretty close to a sweet spot. The one thing I wish for is to be
able to constrain effect order as a user (using your terminology above) when
I'm writing code where one ordering or another is incorrect. The closest I can
come is to fix the top of the stack, which suffices for correctness but puts
some unnecessary burden on the consumer.

~~~
tel
My solution is to make a new typeclass which implies the order you demand.
It'll all be social contract driven, but until we have dependent types one
cannot ask for more.

~~~
dllthomas
Ah, good call!

