小编Eri*_*ten的帖子

在IO monad中进行递归

我一直试图弄清楚如何在IO monad中进行递归.我熟悉使用纯函数进行递归,但是无法将这些知识传递给IO monad.

使用纯函数递归
我很喜欢用纯函数进行递归,例如foo下面的函数.

foo (x:y:ys) = foo' x y ++ foo ys
Run Code Online (Sandbox Code Playgroud)

一个带有IO [String]输出
的函数我做了一个像goo下面这样的函数,它可以满足我的需求并具有IO输出.

goo :: String -> String -> IO [String]
goo xs ys = goo' xs ys 
Run Code Online (Sandbox Code Playgroud)

试图在IO monad中获取递归
当我尝试在IO monad中进行递归时(例如,"主"函数)我不能.我抬头一看liftM,replicateM和撤消最IO <-操作或功能.我想要一个IO monad hoo或者hoo'(为随后的乱码道歉).

hoo :: [String] -> IO [String]
hoo (xs:ys:yss) = do
                  let rs = goo xs ys ++ hoo yss
                  return rs
Run Code Online (Sandbox Code Playgroud)

要么

hoo' :: [String] -> IO [String]
hoo' …
Run Code Online (Sandbox Code Playgroud)

recursion haskell io-monad

4
推荐指数
1
解决办法
298
查看次数

标签 统计

haskell ×1

io-monad ×1

recursion ×1