7 ms·
Developing Web Applications with Haskell
- amelius 11y agoDoes it support a "React" style of building web applications?
- framp 11y agoreact-haskell enables that http://begriffs.com/posts/2015-01-12-reactjs-in-haskell.html http://begriffs.com/posts/2015-01-12-reactjs-in-haskell.html
- tinco 11y agoWhat would have to be different in a web application for it to be able to support the "React" style of building web applications?
- codygman 11y agoDon'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 11y agoThanks 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.
- purescript 11y agoMonad transformers and PureScript's row-based effects are two complementary approaches to the problem of extensible effects. Some effects in PureScript look a lot like the effects provided by certain monad transformers (StateT/ST/Ref, ExceptT/Exception, etc.), but there are differences in terms of how things compose. Take StateT and ExceptT for example: you can compose them in two ways, and get two different monad transformer stacks, with different behaviors (surrounding how state propagates when an exception occurs). There are valid use cases for each, but with the ST and Exception effects, there is only one way to combine them: the way the underlying (Javascript) runtimes chooses for us. There are things which each one can do which the other cannot. Fortunately, we can mix and match in PureScript since we have the purescript-transformers library. A typical arrangement is to stick Eff on the bottom of a monad transformer stack. _Edit_: of course, everything you can do with a monad transformer can be done more verbosely with pure functions and the underlying monad, so you _could_ replace monad transformers with Eff in many cases, but in practical terms, it might not be all that useable in some cases.
- patrickmn 11y agoI think you'll find this interesting: https://www.youtube.com/watch?v=4nTnC0t7pzY https://www.youtube.com/watch?v=4nTnC0t7pzY
- tel 11y agoConsider 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 11y agoI 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 11y agoThere are a number of Haskell-to-JS compilers and Haskell-alike languages which more directly target JS. This is growing quickly but major issues remain and the toolkits are quite immature. On the other hand, much of React is a natural play out of Haskell's sweet spot. The challenge will be in making Js-alike APIs which handle the flexibility well while maintaining sufficient typing. React-like rendering, virtualdom, data flow... this will all be incredibly naturao.
- mark_l_watson 11y agoThat 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 11y agoThat was definitely a good book, would recommend it as well.
- codygman 11y agoI'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 11y agoBased 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.
- 15155 11y agoI'd like to see something like this, but with JSON-based APIs instead of HTML templating.
- danidiaz 11y ago"aeson" is the go-to library for producing and parsing JSON in Haskell.
- codygman 11y agoYou'd like servant: http://haskell-servant.github.io/tutorial/#tutorial http://haskell-servant.github.io/tutorial/#tutorial
- framp 11y agoYou should check out PostgREST, a tool to expose Postres tables through a JSON APIs: https://github.com/begriffs/postgrest https://github.com/begriffs/postgrest
- akurilin 11y agothoughtbot's carnival is a good example of a JSON API written with Yesod: https://github.com/thoughtbot/carnival https://github.com/thoughtbot/carnival
- serras 11y ago(Author here) There is a set of exercises that come with the slides at https://github.com/serras/lambdaconf-2015-web https://github.com/serras/lambdaconf-2015-web In particular, they introduce the Aeson library for both producing and consuming JSON.
- dllthomas 11y agoI believe the HTML templating stuff is pretty optional in all the major Haskell web platforms. I know in Yesod it is trivial to serve JSON rather than HTML from an end-point, and pretty easy to serve multiple representations of the same resource.
- orionblastar 11y agoIt 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 11y agoSuave.io for F# is very nice http://suave.io/ http://suave.io/
- crimsonalucard 11y agoWhat's the most rails or django-esque framework for haskell?
- kyllo 11y agoYesod.
- spectrum1234 11y agoI'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 11y agoFundamentally, 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 11y agoClojureScript 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).