>>340
こういうの?
有限リストを渡すと突然死ぬ

import Control.Concurrent

listToGenerator :: [a] -> IO (IO a)
listToGenerator list = do
  m <- newMVar list
  return $ modifyMVar m $ \(x:xs) -> return (xs, x)

main = do
  g <- listToGenerator [1..]
  print =<< g
  print =<< g