-
Couldn't load subscription status.
- Fork 171
Description
While it's obvious to focus on beginners in this section, the intermediate and advanced material is somewhat lacking. There are numerous papers that are useful in this regard, and it'd be great if there was some guidance on discovering papers, blog posts and other more advanced material too (like... start with these papers, then look in their reference sections and bibliographies for more papers, use the topics you discover as search terms to find more papers like this, blog entries on it, etc).
As first example, I'd consider Yorgey's monoid paper as basically indispensible reading for anyone who wishes to gain a deep first step into a topic which underpins much of computation (let alone only computation in Haskell).
This is something almost exclusively available to Haskell... we have a plethora of academic resources available to us, and we're almost the default language for exploring many topics at the connection point between mathematics and computation.
As with many things in Haskell, while learning the basics of a topic under question is good, useful, and at times reasonably tricky in itself, a mere discussion of how it's implemented, what it is on a face value and a couple of examples is not where the most interesting regions, or even the meat of the difficulty of the topic often lies — usually it lies in an exploration of the ramifications of the choices made in whatever packages is under discussion — that is, in using it across many varied contexts.
I firmly believe this is the reason Monads have been traditionally difficult to understand, aside from the nomenclature issue of Haskell that seems to go largely unnoticed (that is, when it comes to typeclasses, we use the same words for a value of a type as for a type as for a typeclass as for its instances: point in case the answer to the quesiton "what is monad?" Maybe is an example of a monad, Just 5 is an example of a monad, Monad typeclass is monad, and the monad instances for each type are how a monad is defined — this is inherently confusing).
That's to say, the core reason pieces of Haskell are difficult to undersatnd is that they're often extremely abstract, and in teaching it, often the ramifications are skipped over, which is where the subtleties, practical value and interesting parts of the topic usually reside.
BTW, love how the SOTU is taking shape!