小编roh*_*ant的帖子

为什么这个haskell代码不会终止

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
Run Code Online (Sandbox Code Playgroud)

mapM_应该懒惰吗?除了实现队列不应该复杂O(1)吗?

因为追加(++)本身就是懒惰......

haskell lazy-evaluation state-monad

3
推荐指数
1
解决办法
126
查看次数

标签 统计

haskell ×1

lazy-evaluation ×1

state-monad ×1