Изрядно закопавшись в последовательное изложение хаскелла в учебнике, очень было приятно зайти немного с другой стороны, -- со стороны "что-нибудь уже сделать компилирующееся и работающее".
Haskell Quest Tutorial, как раз то, что надо, когда что-то уже в голове сложилось.
И основные конструкции понятны, и краем головы известно, что IO() -- это монада, в общем красиво, просто и занимательно. Прочел на одном дыхании.
Еще один изящный пример работы с ленивыми списками оттуда:
Числа Фибоначчи:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
take 10 fibs
фибс, -- это список, начальные елементы которого 0 и 1, а дальше получаем суммированием со сдвинутым самим собой, т.е.
[0,1,1,2,3]
и
[1,1,2,3]
И берем 10 первых чисел, так, что бесконечность списка совершенно не мешает:
take 10 fibs
И ведь, зараза, оптимизирует рекурсию, чтобы никаких лишних вычислений. А вы говорите, динамическое программирование!