I believe jumping right into Haskell, unless you're already fond of recursion, is a bit too stiff. Maybe try to read SICP, it will expose you to the functional programming principles that lead to Haskell (strict vs lazy evaluation) which he mostly makes more concise and expressive.
I find that this rather old video from OSCON 2007 by the incredible Simon Peyton Jones (of F# and GHC) is the most inspiring Haskell video there is. It uses the X window manager XMonad as the basis to explain many important concepts of Haskell and testing (QuickCheck). It is self contained and no previous knowledge of Haskell is needed:
I started from LYAH and the only thing missing from it were some exercises so I could retain the information that was presented in each chapter. Otherwise, it's a fantastic book.
For my own 2-cents, once I learned QuickCheck[1] and Parsec[2], I found myself slowly rewriting them for every language I program in.
> Will it help me professionally?
Speaking as another professional, probably not.
I love Haskell, but my colleagues can't deal with it. They can't write it. They don't know functional programming. And to be entirely honest, they will never understand Monoids, Monads, or macro-hacking.
> ...Help me being a better programmer?
Maybe. If you like already like to think of software axiomatically, then yes, it will make you will make you think of software more conceptually.
But honestly, getting javascript, ruby and go under your belt will also make you think differently about software, and those are more practical languages.
It begins with head is a mistake! It should not be in the Prelude. Other partial Prelude functions you should almost never use include tail, init, last, and (!!). From this point on, using one of these functions on a homework assignment will lose style points!
And here is a proposal:
data NonEmptyList a = NEL a [a]
nelToList :: NonEmptyList a -> [a]
nelToList (NEL x xs) = x:xs
listToNel :: [a] -> Maybe (NonEmptyList a)
listToNel [] = Nothing
listToNel (x:xs) = Just $ NEL x xs
headNEL :: NonEmptyList a -> a
headNEL (NEL a _) = a
tailNEL :: NonEmptyList a -> [a]
tailNEL (NEL _ as) = as
Dear sirs, a List is a recursive data structure by definition. Non-recursive List is an unimaginable nonsense. What was made here with a name of safe(!) NonEmptyList is some ugly Pair with lots of syntactic noise.
How could you get the last element from your NonEmptyList? How could you tell how many elements in it?)
But, of course, never ever use these ugly unsafe lists - they might be empty! Use safe NonEmptyList because in Haskell everything is safe. And never try to think what the fuck you are reading.
But these are solutions for some Array of unknown size or some abstract collection - why to call it a List? For a List the notion of the-empty-list is essential.
I really wanted to learn functional programming when my university offered it, but unfortunately it's crunched in a horribly busy term and I'm not willing to risk core modules for it if I end up struggling.
That said, I really do want to learn it and find MOOCs a really useful tool, if anybody has any suggestions for any they've used (or the one linked, I'm unclear if that's for students at that university only) that'd be awesome!
25 comments
[ 2.8 ms ] story [ 54.0 ms ] threadalso this http://lisperati.com/haskell/
[1]http://learnyouahaskell.com/
[2]http://book.realworldhaskell.org/
http://channel9.msdn.com/Series/C9-Lectures-Erik-Meijer-Func...
Here's a playlist of a lecture session for HP employees by the authors of the book : http://www.youtube.com/playlist?list=PLB63C06FAF154F047
Here's the book http://mitpress.mit.edu/sicp/ ( alternate formatting texinfo http://www.neilvandyke.org/sicp-texi/ , pdf http://sicpebook.wordpress.com/ )
http://blip.tv/oreilly-open-source-convention/oscon-2007-sim...
I started from LYAH and the only thing missing from it were some exercises so I could retain the information that was presented in each chapter. Otherwise, it's a fantastic book.
http://failex.blogspot.com/
http://www.haskell.org/haskellwiki/Introduction
http://fvisser.nl/post/2013/april/23/slide-cfams-talk.html
https://news.ycombinator.com/item?id=5688803
http://stackoverflow.com/questions/1604790/what-is-haskell-a...
For my own 2-cents, once I learned QuickCheck[1] and Parsec[2], I found myself slowly rewriting them for every language I program in.
> Will it help me professionally?
Speaking as another professional, probably not.
I love Haskell, but my colleagues can't deal with it. They can't write it. They don't know functional programming. And to be entirely honest, they will never understand Monoids, Monads, or macro-hacking.
> ...Help me being a better programmer?
Maybe. If you like already like to think of software axiomatically, then yes, it will make you will make you think of software more conceptually.
But honestly, getting javascript, ruby and go under your belt will also make you think differently about software, and those are more practical languages.
[1] http://en.wikipedia.org/wiki/QuickCheck [2] http://www.haskell.org/haskellwiki/Parsec
It begins with head is a mistake! It should not be in the Prelude. Other partial Prelude functions you should almost never use include tail, init, last, and (!!). From this point on, using one of these functions on a homework assignment will lose style points!
And here is a proposal:
Dear sirs, a List is a recursive data structure by definition. Non-recursive List is an unimaginable nonsense. What was made here with a name of safe(!) NonEmptyList is some ugly Pair with lots of syntactic noise.How could you get the last element from your NonEmptyList? How could you tell how many elements in it?)
But, of course, never ever use these ugly unsafe lists - they might be empty! Use safe NonEmptyList because in Haskell everything is safe. And never try to think what the fuck you are reading.
That said, even NonEmptyList is sometimes useful. For example, some Prelude functions could use it:
Making common idioms like: Safe again.Not sure what you mean by:
> How could you get the last element from your NonEmptyList? How could you tell how many elements in it?) Exactly two.
Is your problem mainly what you call this notion?
http://karma-engineering.com/lab/wiki/Tutorial10
What's the justification for that assertion?
That said, I really do want to learn it and find MOOCs a really useful tool, if anybody has any suggestions for any they've used (or the one linked, I'm unclear if that's for students at that university only) that'd be awesome!