Giter VIP home page Giter VIP logo

learnhaskell's Introduction

How to learn Haskell

This is a recommended path for learning Haskell based on experience helping others. A list of recommendations from one of the authors of the Haskell Book.

For non-English speakers

Don't sweat the stuff you don't understand immediately. Keep moving!

Community

Our IRC channel is #haskell-beginners on Libera Chat.

IRC web client here.

The haskell mailing lists.

Community Guidelines

See the community guidelines to understand the conduct that is expected in the IRC channel. You'll get a warning if you're not obviously trolling, but be aware the channel is exclusively for those learning or teaching Haskell.

Installing Haskell

Use Stack to get going with Haskell

Get Stack to get GHC installed and to build your projects.

If you don't know anything about Stack and would like an overview, check out this comprehensive Stack video tutorial.

Also, DO NOT INSTALL HASKELL PLATFORM

Instead of following the instructions on Haskell.org, get Stack.

Why not platform?

https://mail.haskell.org/pipermail/haskell-community/2015-September/000014.html

How should I learn Haskell?

The core recommendation is to read the lectures and complete all exercises/homework for the Spring 13 version of cis1940 followed by the FP course. Both are linked below. Everything else can be considered optional and is mentioned so you know where to look.

Haskell Programming from First Principles.

@dmvianna wanted me to let you know that the below are just the free recommended resources. If you're willing to check out a book, we heartily recommend our own Haskell Book! If you can't afford the book for any reasons, please email us using the contact information at our support page.

Haskell Book subsumes all of the primary resources recommended here

Yorgey's cis1940 course

Do this first if aren't getting the Haskell Book, this is the best free introduction to Haskell.

Available online.

Brent Yorgey's course is the best I've found so far. This course is valuable as it will not only equip you to write basic Haskell but also help you to understand parser combinators.

The only reason you shouldn't start with cis1940 is if you are not a programmer or are an inexperienced one. If that's the case, start with Thompson's book and transition to cis1940.


Functional Programming course

This is the course we recommend doing after Yorgey's cis1940 course

Available on github here.

This will reinforce and give you experience directly implementing the abstractions introduced in cis1940, this is practice which is critical to becoming comfortable with everyday uses of Functor/Applicative/Monad/etc. in Haskell. Doing cis1940 and then the FP course represents the core recommendation of my guide and is how we teach everyone Haskell.


Supplementary course after cis1940 and the FP course

Provides more material on intermediate topics

cs240h is available online:

This is Bryan O'Sullivan's online course from the class he teaches at Stanford. If you don't know who he is, take a gander at half the libraries any Haskell application ends up needing and his name is on it. Of particular note if you've already done the Yorgey course are the modules on phantom types, information flow control, language extensions, concurrency, pipes, and lenses.


Resources for specific topics in Haskell

These resources are not vetted or tested with learners as cis1940 and FP course have been, but they're linked in the topic listing so you have ideas on where to begin. This includes things like intermediate/advanced concepts and subjects like tooling and text editors.

Dialogues

Hosted in this repository here.

These are actually pretty important and helpful. Look here for deep dives on a variety of topics.

learnhaskell's People

Contributors

berewt avatar bitemyapp avatar doppioslash avatar fester avatar fuuzetsu avatar gazay avatar hypirion avatar jhedev avatar julienxx avatar k-bx avatar keltor avatar kkweon avatar kusut avatar luismilanooliveira avatar mihaimaruseac avatar muzimuzhi avatar mwm avatar nadirs avatar nomeata avatar oscarftoro avatar pharpend avatar prinwis avatar rizary avatar romashamin avatar saydemr avatar southp avatar thomie avatar valsaven avatar wangwangwar avatar yudukikun5120 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

learnhaskell's Issues

Question: why purescript?

Hi Chris,

First of all, thanks for this incredible resource.

I'm a relative newcomer to Haskell but am excited to try out a Haskell-like solution in my frontend work. Would you mind expanding at all on how you've decided to use or advocate purescript for this purpose compared to some of the other options like haste or elm? What are your thoughts as to how viable purescript is currently in a production application?

Thanks, Daniel

Ubuntu precise specific

I think it might be a good idea to make it known in the help text that the instructions for ubuntu are ubuntu precise specific. Because I had trouble with the instructions on ubuntu 13.10. On 13.10 I had to install "software-properties-common" instead of "python-software-properties".

And on 13.10 I had to do 'sudo apt-add-repository "deb http://ppa.launchpad.net/hvr/ghc/ubuntu precise main"' to point the source list to the precise packages and I also had to run "sudo add-apt-repository -y ppa:hvr/ghc" to download the pubkey for verifying the installed packages.

Or perhaps it is mentioned somewhere that these instructions are "ubuntu precise" specific. If it is, it is not obvious.

Thank you

Explain why I shouldn't install Haskell platform

I'm sure there is a good reason, but nearly the first thing people read here is a rather unfriendly all-caps "DO NOT INSTALL HASKELL PLATFORM". If you are going to recommend people deviate from the instructions on haskell.org, I'd really like to be told why I should do so.

I arrived at this page having already installed Haskell Platform, so without hearing the context behind the statement i'm not really sure how I should proceed. I suspect i'm not the only one in that situation.

Could someone add an explanation about why the platform installer is bad?

cis194 course is not active

Submitting register form gave an error. So I send e-mail to them. It seems that this course is set inactive.

Clarification in ch 5 vol 1

Hi!

Thanks for great tutorial! I just started to learn Haskell, while deepening knowledge about functions in chapter 5, found it confusing that term has apostrophe as part of its name. It will be great if you could add example call after defining this, or add info that apostrophe is valid symbol in variables. Later I noticed syntax coloring and it became clear. Its surprising if one came from language which doesn't allow this.

Italian translation

Is anyone working on the italian translation? I didn't find any, so I'm starting working on it today and thought to say it here in case anyone was already working on it or wanted to participate.

Paper on transformers outdated

Thanks for a great guide!

I just went through the Monad Transformers Step by Step by Martin Grabmuller that the guide links to. It was written in 2006, and it's unfortunately a bit outdated.

Many of the code examples don't compile on modern versions of GHC.

Since this is a beginner resource, maybe add a note about that? Or, should it even be there to begin with? I must say I quite enjoyed the Gentle introduction to monad transformers that you link to.

The Russian translation

Hello! I'm a Russian native speaker, and the Russian version looks like it has been google translated. May i provide a translation for it? I'm a bit bored right now and want to contribute.

Makefile documentation

I've added a rule for building the guide for other languages. I'd like to add a couple of lines of documentation, somewhere, to explain the usage.

Where should I write them? I was thinking Contributing.md but am not sure.

Add Haskell Wikibook generally

The Wikibook is superb, especially the elementary sections that go from nothing through monads. It really shouldn't be that you pick out a couple articles only for reference. It should be included in the list of recommended books / overall guides.

happylearnhaskelltutorial

Heya Chris,

I was wondering if you'd be able to add our http://www.happylearnhaskelltutorial.com to your various sites (including this one) because it'd be beneficial for all of us (but mostly for our respective and collective audiences). We should put a link to your book for a what's next after reading ours. I wonder if you'd consider linking to us for people who want to start light or have no money?

Frontend/JS section typo

It reads "a javascript to haskell compiler", but it should say "a Haskell to JavaScript compiler"

"DO NOT INSTALL HASKELL PLATFORM"

I guess this is one stumbling block confusing people who get into Haskell, before they even get into Haskell. Haskell.org is the canonical source to get Haskell, offering 3 different options for the installation. A beginner has no way to understand or make an informed decision what they should do. I would say most other online sources do recommend or point to the platfom variant.

So if you write something like this, I would recommend to drop the capital case (which sounds intimidating) and make sure to explain the reason behind the recommendation.

Why not stack?

Hello!
I assume what stack is far more simple for beginners than GHC and Cabal (even with sandboxes). Can stack be mentioned at least (in the "Installing Haskell" section)?

Worth mentioning your book?

@bitemyapp, I think your book in its current state covers everything you would get from these courses, and will cover even more. Would it be worth mentioning it as an option for an up to date material?

I am just asking because these courses are still written for older version of GHC and don't always work perfectly with Stack. I think your book would be a good option for someone willing to pay the money to save a lot of headache.

CIS 194: Introduction to Haskell (Spring 2015)

I was curious to know if you have evaluated CIS 194: Introduction to Haskell (Spring 2015) and if so what is your opinion of it? Does it resolve the issues with the Fall 2014 course or is Spring 2013 still the best?

Many Thanks

cis194: Homework seven not running under GHC 8.10.2

Executing runhaskell StringBufEditor.hs from Yorgey's seventh homework with GHC 8.10.2 results in:

Editor.hs:38:22: error:
    • No instance for (Applicative (Editor b))
        arising from the 'deriving' clause of a data type declaration
      Possible fix:
        use a standalone 'deriving instance' declaration,
          so you can specify the instance context yourself
    • When deriving the instance for (Monad (Editor b))
   |
38 |   deriving (Functor, Monad, MonadIO, MonadState (b,Int))
   |        

A fix could be provided or at least a remark included in the cis194 section.

Please recommend Haskell Platform for Windows users

Haskell stack seems cool. It is not ready in Windows at this point, though. Too many exceptions. It is too easy to make a mistake and to have to troubleshoot errors that involve digging in app_data/roaming and windows versions of git. For learning, the Haskell Platform is probably an easier install for Windows users at this point. You can always recommend to look into stack once they are ready to build real applications.

Is this is too much to ask, then at least recommend that Windows users install ubuntu on a VM or run it on AWS.

Bash for Windows is supposed to come out this summer. Once it comes out it will be a matter of telling Windows users to use that instead of installing windows compiled binaries.

Gentoo specific

I think Gentoo part should be rewritten in favor of package manager...

Specially I think this part could be removed:

cabal update
cabal install cabal-install
Once you do that, you'll want to install the additional tools alex and happy.

cabal install alex happy

Because in my opinion it's really bad suggestion. Gentoo user should explore and use package manager (there are different ways to getting newer versions of hackage packages) specially in gentoo where we have hackport and advanced Haskell packaging ecosystem. And Cabal is not a package manager

I think really good suggestions for gentoo haskell users would be #gentoo-haskell channel of Freenode and gentoo overlay (could be attached with layman -a gentoo)

stuff from wiki: http://wiki.gentoo.org/wiki/Haskell https://www.haskell.org/haskellwiki/Gentoo

Translations of the guide in general.

Given that @bitemyapp has started a translations cycle, our dear overlord will have to use his iron grasp on how these are to be coordinated. Creating this issue for bundling up several opinions on what is necessary, when necessary.

Add a small list of projects to explore

I find that many Haskell tutorials and articles focus on solving a particular issue the Haskell way. This is great and teaches you the idiomatic way of doing things. What seems to be missing though is how you should go about structuring your app and what the ordinary ways of writing software are.

I think there is value in adding a small of projects that live on GitHub that people go into and read in a single sitting to learn how real-world Haskell feels. For example, it wasn't until way into my learning of Haskell that I learned that one shouldn't be using the String type for reading files and that ByteString is much more appropriate.

What do you think?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.