Haskell 为什么Shake不为操作提供MonadMask实例?
我想使用with,但这需要Haskell 为什么Shake不为操作提供MonadMask实例?,haskell,shake-build-system,Haskell,Shake Build System,我想使用with,但这需要Action为MonadMask创建一个实例,但缺少该实例。为什么Shake不提供这样的实例?有两个原因: 这是不可能的,因为Action是基于一个延续monad的,您不能为延续monad实现MonadMask。请参阅,以大致了解为什么不可能做到这一点 这是不可取的,因为您可以根据依赖规则的成功与否来做出选择,而实际上,您所依赖的规则的失败应该总是导致您失败 但是,Shake确实提供了actionFinally和ActionOneException作为构建块,这是M
Action
为MonadMask
创建一个实例,但缺少该实例。为什么Shake不提供这样的实例?有两个原因:
- 这是不可能的,因为
是基于一个延续monad的,您不能为延续monad实现Action
。请参阅,以大致了解为什么不可能做到这一点MonadMask
- 这是不可取的,因为您可以根据依赖规则的成功与否来做出选择,而实际上,您所依赖的规则的失败应该总是导致您失败
actionFinally
和ActionOneException
作为构建块,这是MonadMask
中可用函数的受限变体。此外,Shake还提供了with tempfile
和with tempdir
,它们与临时
包的功能相同。最后,如果您完全处于IO
,则liftIO
和括号
工作正常