我有这个问题函数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
答案 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