

Functional Programming in Haskell by Examples - bontoJR
https://github.com/caiorss/Functional-Programming

======
M00n_Sl47r
The grammar in this is a bit off. I'll probably submit a pull request with
some edits, if that's something people do? I'm not sure about the etiquette
surrounding grammar mistakes in a github repo.

~~~
jonreem
Personally I am always thrilled to get grammar/typo fix pull requests to my
projects. It means someone cared enough about the project to go through the
effort of making a PR just to alleviate a small aesthetic problem!

------
fiveoak
Nice reference. It's interesting how intuitive the examples are even though
I've never learned a functional programming language before.

~~~
Ericson2314
Learning functional programming is arguably more about unlearning all the
terrible hoops other languages make one jump through.

------
bbcbasic
Great resource. I am learning Haskell. When I get more experienced at Parsec
I'll consider a write up and send you a pull request.

Your monad section looks solid, although now I undestand them I can no longer
tell if a tutorial is good or not :-)

------
christianbryant
I'm curious how you feel Haskell has helped you. Do you actually use Haskell
for a great percentage of your deliverable code or do you simply use it for
ideas, experimentation and so forth?

~~~
embwbam
I've made 2-3 toy REST APIs, and now I'm working on a product using a Haskell
backend that's bigger.
[https://github.com/seanhess/serials](https://github.com/seanhess/serials)

I love it. I mean I could have done the same thing in node. But there's
something about the workflow in Haskell. I need to add a new feature I didn't
think of. But I don't have to refactor as aggressively because all my code is
made up of little functions. I start hacking, my editor has a list of errors I
still need to clean up. I clean them up, and it usually works the first try.

Or this morning I wanted to add a connection pool to my rethinkdb driver code.
The resource-pool package gives you an awesome way to do it for anything.
Without knowing about rethinkdb at all.

Also this morning I wanted to do some IO in parallel. I found several nice
concurrency packages and threw one in without any refactoring.

It has its difficulties (deployment?) but I'm really enjoying it.

~~~
creichert
___It has its difficulties (deployment?) but I 'm really enjoying it._ __

Anything specific? What kind of environments are you deploying in?

~~~
Ericson2314
I highly recommend
[https://github.com/NixOS/nixops](https://github.com/NixOS/nixops), which is
good for deployment in general, but especially good for Haskell since the
Haskell infrastructure was rewritten this year.

~~~
codygman
I found myself using cabbage[0] so I could have exact version dependencies.
Nix was awesome when mostly using latest versions of a package, but for much
of my code I needed specific versions and cabbage allowed me to have them.

0: [https://github.com/acowley/cabbage](https://github.com/acowley/cabbage)

~~~
Ericson2314
For the sake of a single manager for my whole system I'll stick with nix. But
yes, it would be nice if it knew more about versions. In a future where
upstream projects can maintain their own nix packages, I think this will be
unavoidable.

------
titanomachy
The GHCi command to enable multiline mode is `:set +m`, not `:set +s`. `set
+s` enables profiling.

