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

Ali*_*can 3 haskell

我有一个功能,返回我IO (Map.Map String Double),我需要Map.Map String Double,没有IO.

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

extractIO (IO (a)) = a
Run Code Online (Sandbox Code Playgroud)

Seb*_*edl 12

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

如果你有一个IO(Map.Map String Double)并且你想要处理那个东西,你必须在monadic上下文中做,即

stuff :: IO ()
stuff = do
  map <- theThingThatReturnsYourIOMap
  theThingThatNeedsYourUnwrappedMap map
Run Code Online (Sandbox Code Playgroud)

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