@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.

@jonn It's not that I like one over the other, it's that I think they are more common from a beginners perspective :)

Sign in to participate in the conversation
Doma Social

Mastodon server of https://doma.dev.