( , )
a "ListT [] a". (ListT List )
- lastL.
"Monad m => ListT m a" , "a" s, ( , ) "m".
ListT - , , :
main =
execute . joinM . fmap print .
scanl (+) 0 .
fmap (fst . head) .
takeWhile (not . null) .
fmap reads .
joinM $ (repeat getLine :: ListT IO (IO String))
repeat, scanl takeWhile Data.List.Class. , .
joinM :: List l => l (ItemM l a) -> l a -- (l = ListT IO, ItemM l = IO)
execute :: List l => l a -> ItemM l () -- consume the whole list and run its actions
Python, / python "ListT IO" s.
[] IO . ? , - - , , " ", .
(, ), cons, - ( yield) GeneratorT monad generator .
: ListT GeneratorT . , , . ListT s, Haskell wiki, NondetT .