如何让GHC确认该pattern synonym为COMPLETE完备匹配?
解决方案
你需要在COMPLETE编译指令中显式声明该模式同义词所匹配的值的多态类型,正确写法如下:
{-# COMPLETE Call :: forall env m. env #-}
说明
- 报错的根本原因是多态模式同义词的
COMPLETE标记无法被GHC自动推断覆盖范围,需要显式指定它匹配的目标值的类型,而非模式同义词本身的完整类型。 - 你的
Call模式作用是匹配类型为env的值,因此仅需要在指令中给出匹配目标的多态签名forall env m. env即可,无需包含模式的入参类型部分。 - 添加该声明后GHC会识别出所有对
env类型值使用Call的匹配都是完备的,不会再额外要求MonadFail约束。
内容的提问来源于stack exchange,提问作者danidiaz
相关产品推荐
相关产品推荐

