Follow

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

@suppi I would split "Extras" into "Pragmatic" and "Theoretical", and place

- optics (Lens, Prism)
- type families
- DSL embeddings with final tagless and free

under "Pragmatic", and

- λ-calculus
- template haskell
- dependent, linear and session types

under "Theoretical".

@jonn I really don't want to mention type level programming in this article. I don't think they are relevant when talking about the bottom of the Haskell pyramid.

@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 :)

@jonn I changed it to "property-based testing and QuickCheck". Thanks :)

@suppi well, my suggestion was more than a mere nit-pick. I think that we should teach beginners hedgehog, not quickcheck and megaparsec, not parsec.

@jonn I don't mention parsec or megaparsec in the article, and I disagree with hedgehog being better than quickcheck. I've used quickcheck extensively and I think it's a good library and that there are good tutorials for it out there, hedgehog crashed my computer by consuming too much memory within 2 hours of use.

@jonn I do appreciate the feedback, but I want to recommend things I have good experience with.

@suppi oh, it's not a problem! My feedback is simply an opinion. I love Haskell for the fact that one can use whatever they are comfortable with and get good results.

@jonn Agreed, Haskell is really cool and I use it for pretty much everything. I wish more people use it!

Sign in to participate in the conversation
Doma Social

Mastodon server of https://doma.dev.