我有这样的功能:IO序列哈斯克尔
sequence :: [IO a] -> IO [a]
sequence [] = pure []
sequence (op:ops) = do
x <- op
xs <- sequence ops
return (x:xs)
刚刚写入的IO操作的顺序。
问题是我想编写相同的函数,但是完全不使用'do notation',只是使用操作符>>和>> =来代替。
我已经有该版本:
mySequence:: [IO a]-> IO [a]
mySequence [] = pure []
mySequence (op:ops) =
op >> sequence ops
但它不会例如与输入[纯1,纯2]工作。
任何人都可以帮助我吗?
在此先感谢。
在'do'版本中,您有2个绑定和一个return语句。在没有'do'的版本中,你使用'>>',它放弃了它左边的操作数的结果,并且你唯一返回的是'[]'。 'do'版本也使用':'运算符,而''''''''''版本不支持。 – sepp2k