
31 May
2011
31 May
'11
7:13 p.m.
On Tue, May 31, 2011 at 6:10 PM, Antoine Latter
You could use a different type:
type IOStream a = (a, IO (IOStream a))
unfold :: ([a] -> IO a) -> IO (IOStream a) unfold f = let go prev = do next <- f prev return (next, go (next:prev)) in do z <- f [] go [z]
toList :: Int -> IOStream a -> IO [a] toList 0 _ = return [] toList n (x,rest) = do xs <- toList (n-1) rest return (x:xs)
Let's pretend I did that right:
toList :: Int -> IOStream a -> IO [a] toList 0 _ = return [] toList 1 (x,_) = return [x] toList n (x,r) = do rest <- r xs <- toList (n-1) rest return (x:xs)
Antoine