New blog post: The bottom of the #haskell Pyramid (as I see it):
https://gilmi.me/blog/post/2021/03/16/bottom-haskell-pyramid
@suppi I would errata "learn about QuickCheck" to say "learn about property-based tests and try out Hedgehog".
@suppi I would place transformers before parsers because it would make it harder to understand ParserT and lifting, but keep mtl where it is as a broader application.
@jonn Sorry I don't understand? I don't think I mention parsing explicitly other than offhandedly when mentioning typeclasses. Also, I've never used ParserT before so I don't see this is an issue.
@suppi fair, but IIRC `Parsec` in parsec family of libraries is just a type alias for their transformer over Identity. I remember that as a beginner trying to do top-down parsing into a data structure, I was glad that I knew that monads aren't composable and that I can stack them with transformers. :)
@jonn when I wrote about parsing I was thinking about cli argument parsing using optparse-applicative, or json parsing using aeson, rather than parsec or megaparsec :) I probably wouldn't use parsec/megaparsec if I didn't really like compilers.
@suppi haha, my experience is completely opposite. I can't wrap my head around parsing with aeson and avoid it as much as I can, trying to get away with `deriving Generic` as much as I can, whereas I use combinator parsing everywhere because it hits the sweet spot between being imperative enough to have that "Turing-complete" and declarative enough to read like a formal grammar.