20/10/29 16:24:06.73 95aSRVZj.net
State モナドを“準標準”と認めてもらえるなら簡単
Haskell
import Control.Monad.State
pop :: State [a] a
pop = do
a <- get
modify tail
return $ head a
push :: a -> State [a] ()
push x = do
modify ((x :))
return ()
test = do
push 1
push 2
push 3
a <- pop
b <- pop
c <- pop
return ([a,b,c])
main = print $ evalState test []
---
出力
[3,2,1]