Haskell Good Reads: From Zero to Hero

I really like @gilmi’s plan on learning Haskell :+1: And I want to mention Learn4Haskell separately.

We’ve created this course in Kowainik to help people get started with Haskell quickly and learn the language basics. The course contains descriptions of various concepts and tasks that you can solve along the way. So you don’t need to read anything external, you can open code in your editor and learn Haskell.

The killer feature of Learn4Haskell is that we provide a review of your solutions with feedback and suggestions.

6 Likes

I’m confused. In my opinion, @ChShersh did contribute very on-topic suggestions for a study plan. Can you outline what’s been offending you in his post (and apparently, some previous posts in this thread as well)?

2 Likes

I’ll help you: I am trying to collect feedback on a list of written publications (the Good Reads) meant to provide a pleasant and useful experience as a part of reading sessions. It it clear from my list, and from the comments and replies under it, that online git-based courses fall outside of this scope. @gilmi had the politeness of questioning some of the assumptions behind my intent, and that is fine – we can discuss my assumptions. But injecting one’s elevator pitch in the middle of it is uncalled for at best.

To be fair it is not clear from your original post that what you are looking for is “a pleasant reading experience”. You mention wanting the list to lean towards practical Haskell, be concise as possible and may contain any sort of written material. Learn4Haskell is absolutely all of those things.

You might want to further clarify your intentions in the original posts in order to get more responses relevant to your interests. Can be done without passive aggressive responses as well.

5 Likes

If you will allow me a shameless self promotion, I’ll throw my Monad Challenges (https://mightybyte.github.io/monad-challenges/) out there for consideration. I have two reasons for doing so. First, I don’t think there’s any substitute for hands-on fighting with the language while you’re trying to accomplish things. A lot of the materials I see (especially in the area of monad tutorials) focus more on explaining the concepts and less on providing a path for the student to develop their own intuition. And I think the monad challenges are notably different in that regard. Second, I would really like to get more suggestions from the community on how to improve / expand it.

4 Likes

You should be able to @Nycticorax. I am sure @ChShersh et al. had no ill intentions — indeed why not assume good faith? It is how we try to get along here.
Now that you made your objective clearer I am certain people will interact within your goal.

If you still cannot edit your post or want this thread split, PM me.

Thanks to the kind intervention of a moderator, I’ve made that clearer wherever I was able to.

@Nycticorax I’m sorry for derailing the conversation in a wrong direction. I must have misinterpreted some of your goals and wishes for a reading list, as I haven’t read the whole discussion, and thought that Learn4Haskell might be a good resource for learning Haskell from zero in the context of this topic. I apologise for my message.

4 Likes

It is fine, my original message wasn’t clear enough. I am sorry I overreacted – I’ve seen many similar situations in the past and I might have grown an excessive sensibility in that regard. Your work is enticing and I hope it will help many newcomers.

2 Likes

I’ll go ahead and plug my own book, Production Haskell. It’s not quite done yet and still has hundreds of pages of great practical information. It’s less about “how to learn Haskell” and more “how to use Haskell.”

My blog is also primarily focused on practical Haskell developmen.

2 Likes

Can you rephrase your post in a way that meets the wish expressed in the (recently updated after requesting moderation) original post?

I get that people who post here want to help, and having written a book gives you a ton of legitimacy to express your views on the topic. But I’d like to avoid a plug-fest of people pitching what they’ve done – I am trying hard to make this topic about discussing combinations of written resources which together make for a healthy learning path. Can we please dodge the individual stuff and think about the future learners here? Can we agree on useful combinations of written material instead of plugging one’s own material and saying it’s good?

If you agree to this goal, you need to forgo you writer-self, and give your reader-self the entire stage.

I feel like you aren’t going to discover many ready-made lists of Haskell content that haven’t been seen before. If people post individual pieces of content in this thread, surely those can be evaluated and combined into a list?

Furthermore I’m not clear about the goal here. Are you asking for something like a syllabus, where readers start at zero and read until the end? Or are you asking for a collection of works in roughly increasing difficulty order that are all individually good? If you’re looking for the former then I suspect throwing more than 2,000 pages of reading at someone will make them run away. But if you’re looking for the latter, why isn’t self promotion of relevant resources on topic?

To hopefully provide an on topic suggestion, there is a detailed wiki page available with many good resources listed on it: https://wiki.haskell.org/Learning_Haskell

And of course to plug my own thing, I think Haskell Weekly is a good way to test the waters of Haskell without needing to buy in too much. Subscribe, scan the headlines each week, and see if anything interesting pops up. I try to feature content that focuses on the more practical, “workaday” side of things rather than type astronautics. Hopefully beginners will appreciate that.

1 Like

Or are you asking for a collection of works in roughly increasing difficulty order that are all individually good?

Yes.

if you’re looking for the latter, why isn’t self promotion of relevant resources on topic?

Self-promotion is OK, but only insofar as the person self-promoting uses the self-promoted thing as a means to engage with the question:

If, of all the things we’ve read, you had to pick a minimal set of written publications (“static contents” like books, articles, blogs, not git-based tutorials) meant to teach practical Haskell from beginner to advanced / expert, what would this minimal set be, and in what order should the works be read?

1 Like

I cautiously offer:

One of the best quick practical Haskell books IMHO.

3 Likes

I hesitate to mention anything after reading the entire thread, since it is now completely unclear to me what kind of comments are sought by the OP.

  • A real book (though this already appears on the Learning Haskell wiki page): What about Haskell: the craft of functional programming (3rd Ed.) by Simon Thomson (Addison-Wesley, 2011)? A self-contained, though somewhat older, comprehensive-but-far-from-complete introduction to Haskell as a (functional) programming language and how to use it in practice. You may not need more; readable, well-organized (3rd edition). But opinions vary (some find it fun and readable, etc.).

  • As mentioned by others, just reading (books, or anything else) will not be enough and not be very effective. What I found helpful is the IHaskell kernel for use with interactive Jupyter notebooks. No need to create projects, to compile stuff, to scroll back in the invisible history of an interpreter. All your experiments sit together in a single document, with your textual notes (where you can use LaTeX formatting), and immediate hlint feedback. Unfortunately, I don’t know any books that exploit this for Haskell. (I also use these Jupyter notebooks with the IPython, IJava, and (also free) Wolfram Language kernels.)

2 Likes

Hi, I can’t resist to recommending my book “Functional Design and Architecture”. It’s exactly this:

  • Describes a really practical Haskell;
  • Tells you about application architectures, approaches, design patterns, best practices and principles of software development in Haskell;
  • Is backed by the Hydra showcase framework having all the needed subsystems for building web backends and console apps out of the box (SQL DBs, logging, KV DBs, multithreading etc);
  • Is backed by several showcase apps built on top of Hydra;
  • Backed by the real-world technologies I created for several companies using the ideas from the book.

Let me articulate this better: I wrote my book, invented several approaches for building real world apps in Haskell, and then used these ideas in real production. In Juspay, where I’m working currently, we have at least 3 core frameworks I (with other colleagues) created:

  • Haskell EulerHS framework (the older brother of Hydra). We use this framework for our financial backends intensively.
  • PureScript Presto.Core framework. This one is needed for our mobile apps. Also very successful, and in fact the first framework I created for them.
  • PureScript Presto.Backend. This is a fork of the Presto.Core, but for backends. They took the same design and used it for their backend needs. The most of the business logic is written on top of it (hundreds of kilos of LoC).

I and my team also created the Enecuum’s Node framework for distributed apps and blockchains. This allowed us to create a very reliable, highly concurrent and testable blockchain in short terms.

So you can see how much is done, all is due to my book (this is not the exhaustive list even). And just to be clear: no, I’m not only creating frameworks, I’m also developing a lot of business logic, so I know how it is important to have a good code base in terms of code quality, maintainability, simplicity, testability. These are all the topics of my book.

Currently, I’m working on the second edition for Manning Publications. Hope to have it at the end of this year.

And also, I have my second book under development: Pragmatic Type Level Design. Join me to know more!

4 Likes

@graninas Which books did you read which either inspired you the most in writing yours or are those which you wanted to improve upon the most?

@Nycticorax That’s an interesting question!

In 2015, I started looking for materials on how to design big apps in Haskell. I was a C++ / C# / Python developer professionally, and I had a pretty wide ‘mainstream’ background. Haskell was only my hobby. I wanted to read something like Martin Fowler’s “Patterns of Enterprise Application Architecture”, or “Design Patterns” (GoF book), just for Haskell. I was quite sure that there should be some match between how we approach this task in the mainstream and in Haskell, because this knowledge seems to be universal. Testable code, inversion of control, complexity management, layering, design principles such as SRP - all this seems to be applicable to Haskell. But there was none such material. “Real World Haskell” was good, but not quite about this. I was unable to find some material and decided to write my own book (in 2016). Later or, we could have enjoyed by some books happened in this field, for example, “Domain Modeling Made Functional” by Scott Wlaschin. Seems people from other functional languages recognized the problem as well, and started fixing it. There are such books on Scala, I haven’t read them yet. Recently, other haskellers contributed to covering this gap in Haskell, see the book “Production Haskell” by @parsonsmatt . @bravit also touches some questions in his “Haskell in Depth” But I can say it’s not enough. There are lots of things which can be described from the practical point of view.

1 Like

Basic yet very readable tutorial about type-level language pragmas: https://github.com/i-am-tom/haskell-exercises

1 Like

I think you list if great. I wanted to note that what really helped me with Haskell was reading some
non-Haskell books. In particular a book about PLT like TAPL by Benjamin Pierce helped me a great deal.
Idris book is another example (Type Driven Development with Idris (sadly still for version 1 of Idris) is another example of non-Haskell book that is so helpful with Haskell.
Also Bartosz Milewski’s Category Theory For Programmers! - this one is Haskell focused.

2 Likes