各要素間で「譲歩」し、その要素を出力に出力することを繰り返したい単純なリストがあります。これを行うために ContT モナドを使用しようとしていますが、問題が発生しています。これが私がこれまでに持っているものです:
data K a = Nil | K (a,() -> K a)
listIterator :: (Monad m) => [r] -> m (K r)
listIterator [] = return Nil
listIterator (x:xs) = return (ContT (\k -> K (x,k))) >> listIterator xs
runIterator :: IO ()
runIterator = do
a <- listIterator ([1,2,3] :: [Int])
let loop Nil = liftIO $ print "nil"
loop (K (curr,newI)) =
do
liftIO $ print curr
loop (newI ())
loop a
予想される出力は次のとおりです。
1
2
3
nil
私が得るものは次のとおりです。
nil
どんな助けでも大歓迎です!