可能重复:
haskell问题:io字符串->[int]
如何将Haskell IO列表转换为普通列表?
IO [value] -> [value]
是否有任何内置函数可以执行此操作?
有一些方法可以满足你的要求,但这是不安全的。因此,我认为你应该从另一个角度来看待这个问题。为了将列表从IO
中取出,您应该将纯函数提升到IO
中。
假设您想从DB中获取列表并对其应用一些纯函数,那么您可以执行以下操作:
yourFunc = do
list <- getListFromDB
return (myPureFunction List)
或者如果你想打印结果后记:
yourFunc = do
list <- getListFromDB
print (myPureFunction List)
一般来说,为了计算纯IO monad内部的结果您可以使用let:
yourFunc = do
list <- getListFromDB
let result = myPureFunction list
return result
或更紧凑:
import Control.Monad((=<<))
import Control.Applicative((<$>))
yourFunc = print =<< myPureFunction <$> getListFromDB