import Control.Monad.State.Lazy
type Queue a = [a]
push :: a -> State (Queue a)()
push x = state (\xs -> ((),xs++[x]))
pop :: State (Queue a) a
pop = state (\(x:xs) -> (x,xs))
queueManip :: State (Queue Int) Int
queueManip =
do
mapM_ push [1..]
a <- pop
return a
main :: IO()
main = do
let (a,_) = runState queueManip []
print a
Не должен ли mapM_
быть ленивым? Кроме того, для реализации очереди не должно быть сложности O(1)
?Зачем этот код haskell не заканчивается
Поскольку Append (++)
сам ленив ...
Не совсем то же самое, посмотрели ли вы http://stackoverflow.com/questions/3270255/is-haskells-mapm-not-lazy? – zigazou