when you think about it, not toooo surprising. Haskell's undeniable killer app is parsing and compilation, so pandoc was pretty much a project destined for Haskell if I ever saw one :)
you don't need an ordered JSON for this. Just make sure that your equality tests ignore ordering, or that your and hash functions will hash two JSON objects with the same key but different order to the same hash.
GoL wasn't used here because of any value or analogy... it's used as an example of how a simple set of rules can generate complex behavior. GoL can display complex behavior, but it would be a stretch to to say that the rules governing it are complex. If you think GoL is too simplistic, you are agreeing with the original comment.
You can programmatically put statements together, and manipulate them like real values. But that doesn't mean that pure simulated execution has to be a part of the API :)
yea, but the struggle isn't really quite with monads, but with syntax. properly understanding the syntax for do notation with use in IO does not require an understanding of monads.
I do mention that instances of the Monad typeclass have to follow certain laws to make sure that they are "meaningful and useful"...I handwaved the actual laws away in the ambiguous interpretations of 'meaningful and useful' :) I made the choice that going into what that really meant would be beyond the scope of the article...but thanks for the comment :)
Hi, author here; experimenting with some ways to explain two very useful concepts that I feel don't get enough mainstream popularity, despite being applicable to many languages :) Let me know if there are any obvious mistakes, awfully written sections, or questions :)