Hacker News new | past | comments | ask | show | jobs | submit login
Write yourself a Scheme in 48 hours: A Haskell Tutorial (tang.name)
103 points by juliangamble on Oct 26, 2013 | hide | past | favorite | 20 comments




It's weird to see a comment I wrote 4 years ago saying "Yeah, I haven't really touched this in 3 years." Man, I'm getting old.

Still, it's neat to see folks still find this interesting & informative. I learned a lot from writing it, and I hope others learn a lot from reading & working through it.


Thanks for writing it. It was one of the things that helped me makes some sense of Haskell.

So much of what I had been seeing was all heavy math and abstractions, and while that's interesting it never gave me a foothold for actually using it.

Seeing something much more tangible made a big difference.


I have the same feeling (and appreciation)– it inspired me to try learning both Haskell and Scheme. Still not sure if I'm an idiot or just insatiable.


I gotta agree. It helps that Parsec is so awesome and Scheme so straightforward--very little cruft to cover.


Thank you, I was looking for exactly this kind of Haskell tutorial. I really liked learnyouahaskell, but realworld Haskell not soo much. Will give this a go.


Wikibooks really needs to get syntax highlighting - I find it helps me a lot when reading code.


Spent a lot of time this week working through the Learn you a Haskell tutorial. Definitely getting bored of adding numbers, each exercise and example is so trivial that it's hard to get curious and go down a rabbit hole that teaches you a lot.

I'll try this out this week. Thanks for sharing!

What I'm wondering about is how you arrived at the 48 Hour number?


It's a pun on an existing Scheme implementation, Scheme 48 [1]. This was a research implementation by Jonathan Rees and Richard Kelsey that was so named because it was supposedly written in 48 hours. The idea for the tutorial was that "Hey, anybody can write a Scheme in 48 hours, you don't have to be an accomplished professor!"

48 hours is actually somewhat ambitious - it took me about 3 months of nights & weekends time to write it (although that also included teaching myself enough Haskell to write the implementation all the way through first before writing it up as a tutorial). It's probably technically possible to go through it in a weekend and write yourself a Scheme, but to really learn things in depth may take a bit longer.


Right, forgot the footnote:

[1] http://s48.org/


http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way...

I wasn't crazy about LYAH or RWH. They're both spreading too little butter over too much dry toast.

Haskell the Hard Way is small, dense, efficient, and enjoyable.

I think one of the more popular, but fundamental, mistakes in teaching Haskell is in thinking that the more important "revelations" are easier to convey if you hide them in a sea of noise and that doing so is the only alternative to impenetrable white papers.


LYAH is a chore. I got nowhere with it - it is tedious. After a cursory glance a few of us at my company are working through The Little MLer in Haskell instead. It seems to really be focussing on types and I think those kind of core concepts are important to grasp at the early stages.

More importantly, the Little Schemer and The Little MLer are aimed at non-programmers... yet programmers struggle with them. We should question why that is.


Just to counter-signal the general negativity bias of internet comments on anything popular:

I liked Learn You A Haskell a lot.


Yup, I didn't mean to open a negativity fest. It's a double edged sword with the shallow examples (e.g. calculating BMI). LYAH does a very good job of explaining every single detail in those lines of code, I've never left an example confused but at the same time the simplicity keeps you from having questions you want to explore.

I don't think this is a bad thing. In any mathematics class I ever excelled in I spent a lot of time mindlessly executing the mechanics and knowing the names and pieces that were relevant, once I knew all that it became very easy to see the interpretations and the applications.

I think I'll finish LYAH before doing one of these more application oriented tutorials.


To ameliorate my point; I use LYAH as a reference piece a lot. It's well written and is a really takes time over many subjects. I mostly wanted to make (badly!) a point that there are resources out there that will push experienced and non-experienced alike. And they don't need to be in the language you're looking to learn right now.

Either way - I hope to give Write Yourself a Scheme... a go sometime soon. Looks good.


A lot of programmers are so indoctrinated in the imperative programming model that a language like Scheme and the approach of the Little LISPer (I will always think of it by that title) hurts their brain upon first exposure. The less curious of them will say "this is stupid" and go back to their familiar world of Python or Ruby.


Have you tried Real World Haskell, [ http://book.realworldhaskell.org/ ] if you find Learn You a bit boring?


It seems this has been posted before.

Nonetheless, thank you very much; it's new to me. Scheme is wonderful, and I'm enjoying learning Haskell. This will be a fun exercise.


I got stuck in the first exercise #2. I'm trying to read 2 args, cast them to int and add them.

putStrLn( read (args!!0)::Int + read(args!!1)::Int )

Definately need to do learnyouahaskell before reading this tutorial which is what I'm about to do. The link to how read is implemented doens't make any sense to me (coming from a procedural language background).

I suggest adding answers to the exercises or asking questions that are self contained in the tutorial.


blah :: Type + blah :: Type is gonna get parsed as blah :: (Type + blah :: Type), just add more parens there. Also, you need to convert the result back to a string before calling putStrLn.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: