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

标签 haskell

<分区>

Possible Duplicate:
haskell-problem: io string -> [int]

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

IO [value] -> [value]

是否有任何内置函数可以执行此操作?

最佳答案

有很多方法可以满足您的要求,但这是不安全的。因此,我认为你应该反过来看问题。为了避免从 IO 中获取列表,您应该将纯函数提升到 IO 中。

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

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

关于haskell - 将 Haskell IO 列表转换为列表类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5802331/

相关文章:

haskell - Haskell 中的编译器集成测试

haskell - 如何在 Yesod 中进行(基于角色的)访问控制?

haskell - 使用 llvm 后端编译 haskell .ll 文件时出错

haskell - 共享值在 Haskell 中被(不必要地)多次评估

haskell - 你能在 Haskell 中为整个类而不是类型创建一个类的实例吗?

Haskell 错误接口(interface)文件

testing - 如何在 haskell 中测试 count_if 函数

haskell - 使用 `generics-sop` 导出投影函数

Haskell: (+1) 和 (\x->x+1) 有什么区别?

performance - ByteString concatMap 性能