没有IO的IO monad参数用法

时间:2014-01-28 14:52:04

标签: haskell

我有这个问题函数calculate接受IO类型我已经有了一个函数 返回相同的东西,但它接受一个她的类型。以下是我的代码。我一直在网上搜索一段时间,但我无法解决我的错误。提前告诉你。

pureCalculate :: Expr (Double -> Double -> Double) -> Map.Map String Double -> Double

calculate :: IO(Expr (Double -> Double -> Double)) -> Map.Map String Double -> IO Double

calculate expr args =
    do let x = pureCalculate expr args
       return x

1 个答案:

答案 0 :(得分:6)

我相信你想做像

这样的事情
calculate ioexpr args = do
    expr <- ioexpr
    return $ pureCalculate expr args

要使用包含在IO monad中的值,首先必须使用<-表示法提取它,或者可以使用其他函数(如fmap)将函数映射到内容。

如果您想在这种情况下使用fmap,则可以执行类似

的操作
calculate ioexpr args = fmap (\expr -> pureCalculate expr args) ioexpr

相当于

calculate ioexpr args = fmap (`pureCalculate` args) ioexpr

calculate ioexpr args = fmap (flip pureCalculate args) ioexpr