On 14 jun 2010, at 07:42, Aran Donohue wrote: > Hi Cafe, > > I've been doing Haskell for a few months, and I've written some mid-sized > programs and many small ones. I've read lots of documentation and many > papers, but I'm having difficulty making the jump into some of the advanced > concepts I've read about. > > How do people build intuitions for things like RankNTypes and arrows? (Is the > answer "Get a PhD in type theory?") Normally I learn by coding up little > exercise programs, but for these I don't have good intuitions about the kinds > of toy problems I ought to try to solve that would lead me to understand > these tools better.
I learned my advanced stuff in two ways: 1. I followed excellent courses at Utrecht University, where they teach (among other things) advanced functional programming. 2. I just read a lot, which is a lot slower than 1. 3. By building my own programs, I inevitably find my self stuck and while searching for a solution, sometimes these concepts are the answer. For example, once I had a monadic program and I wanted to serialize/inspect the program, which turned out to be impossible in my case. The solution was to write it down using arrows (thus I had to learn arrows and also arrow-notatation). I think (for me) this is the most powerful way to learn new advanced concepts. I need practical problems to keep myself motivated. > For systems like Template Haskell and SYB, I have difficulty judging when I > should use Haskell's simpler built-in semantic abstractions like functions > and typeclasses and when I should look to these other mechanisms. Sometimes Template Haskell or SYB is the answer, and it's a matter of style, but I try to avoid them as much as possible. I find that generic programming in the style of regular [1] or emgm [2] is often much simpler. Some more tips: subscribe to planet haskell, if you haven't done that already. Try to find ICFP/JFP/etc papers online that interest you. -chris [1]: http://hackage.haskell.org/package/regular [2]: http://hackage.haskell.org/package/emgm_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe