将Haskell IO列表转换为列表类型



可能重复:
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

最新更新