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

123*_*3Ex 1 haskell

可能重复:
haskell-problem:io string - > [int]

我如何将Haskell IO列表转换为普通列表?

IO [value] -> [value]
Run Code Online (Sandbox Code Playgroud)

有没有内置功能来做到这一点?

Has*_*ant 10

有办法做你要求的,但它是不安全的.因此,我认为你应该以相反的方式看问题.为了获得列表IO,你应该将你的纯函数提升到IO.

假设您想从DB获取列表并对其应用一些纯函数,那么您可以执行以下操作:

yourFunc = do
  list <- getListFromDB
  return (myPureFunction List)
Run Code Online (Sandbox Code Playgroud)

或者如果你想在后面打印结果:

yourFunc = do
  list <- getListFromDB
  print (myPureFunction List)
Run Code Online (Sandbox Code Playgroud)

通常,为了计算IO monad内部的纯结果,您可以使用let:

yourFunc = do
  list <- getListFromDB
  let result = myPureFunction list
  return result
Run Code Online (Sandbox Code Playgroud)

或更紧凑:

import Control.Monad((=<<))
import Control.Applicative((<$>))

yourFunc = print =<< myPureFunction <$> getListFromDB
Run Code Online (Sandbox Code Playgroud)