
Hello, I am still confused, sorry :-) It appears that the code has a type error: repeatM randomItem :: State g [Int] so, isn't 'item' of type '[Int]'. On the other hand, 'updateState' is expecting an 'Int' as an argument... -Iavor
createItems :: RandomGen g => State g [Item] createItems = liftM catMaybes $ runListT $ flip evalStateT initialState $ runMaybeT $ do item <- liftRandom $ repeatM randomItem updateState item needMoreItems >>= guard return item where liftRandom = lift . lift . lift
-- Create one random item. randomItem :: RandomGen g => State g Item randomItem = State $ randomR (1, 5)
-- repeatM is still missing from Control.Monad. -- I hope they will put it in soon. repeatM :: Monad m => m a -> m [a] repeatM = sequence . repeat