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

时间:2011-04-27 10:01:24

标签: haskell

  

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

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

IO [value] -> [value]

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

1 个答案:

答案 0 :(得分:9)

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

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

yourFunc = do
  list <- getListFromDB
  return (myPureFunction List)

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

yourFunc = do
  list <- getListFromDB
  print (myPureFunction List)

一般来说,为了计算纯净 你可以使用IO monad里面的结果:

yourFunc = do
  list <- getListFromDB
  let result = myPureFunction list
  return result

或更紧凑:

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

yourFunc = print =<< myPureFunction <$> getListFromDB