Почему это простое использование монады State вызывает переполнение стека?

Я играл с монадой State и не знаю, что вызывает стек переполнение в этом простом фрагменте кода.

import Control.Monad.State.Lazy

tick :: State Int Int
tick = do n <- get
         put $! (n+1)
         return n

million :: Int
million = snd $ runState (mapM_ (const tick) [1..1000000]) 0

main = print million

Примечание Я просто хотел бы знать, что вызывает проблему в этом фрагменте кода, сама задача не важна сама по себе.

17
задан haskelline 3 November 2011 в 16:30
поделиться