Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么Shake不为操作提供MonadMask实例?_Haskell_Shake Build System - Fatal编程技术网

Haskell 为什么Shake不为操作提供MonadMask实例?

Haskell 为什么Shake不为操作提供MonadMask实例?,haskell,shake-build-system,Haskell,Shake Build System,我想使用with,但这需要Action为MonadMask创建一个实例,但缺少该实例。为什么Shake不提供这样的实例?有两个原因: 这是不可能的,因为Action是基于一个延续monad的,您不能为延续monad实现MonadMask。请参阅,以大致了解为什么不可能做到这一点 这是不可取的,因为您可以根据依赖规则的成功与否来做出选择,而实际上,您所依赖的规则的失败应该总是导致您失败 但是,Shake确实提供了actionFinally和ActionOneException作为构建块,这是M

我想使用with,但这需要
Action
MonadMask
创建一个实例,但缺少该实例。为什么Shake不提供这样的实例?

有两个原因:

  • 这是不可能的,因为
    Action
    是基于一个延续monad的,您不能为延续monad实现
    MonadMask
    。请参阅,以大致了解为什么不可能做到这一点
  • 这是不可取的,因为您可以根据依赖规则的成功与否来做出选择,而实际上,您所依赖的规则的失败应该总是导致您失败
但是,Shake确实提供了
actionFinally
ActionOneException
作为构建块,这是
MonadMask
中可用函数的受限变体。此外,Shake还提供了
with tempfile
with tempdir
,它们与
临时
包的功能相同。最后,如果您完全处于
IO
,则
liftIO
括号
工作正常