Haskell:如何从IO(a)转换为?

时间:2013-05-27 12:45:51

标签: haskell

我有一个函数可以返回IO (Map.Map String Double),我需要Map.Map String Double,而不需要IO。

我尝试这样做,但它失败了:不在范围内:数据构造函数`IO'。

extractIO (IO (a)) = a

2 个答案:

答案 0 :(得分:12)

你不能只打开IO,这就是IO的全部要点。

如果您有一个IO(Map.Map String Double),并且您想要处理该事物,则必须在monadic上下文中进行,即

stuff :: IO ()
stuff = do
  map <- theThingThatReturnsYourIOMap
  theThingThatNeedsYourUnwrappedMap map

如果你更详细地解释你想做什么,我们可以给你一个更详细的答案。

答案 1 :(得分:1)

http://cvs.haskell.org/Hugs/pages/libraries/base/System-IO-Unsafe.html

unsafePerformIO

但这不是一个好主意。