有没有办法检测 Haskell 中的冗余约束?
例如:
class (A a, B a) => C1 a -- C1 ~ A AND B
instance (A a, B a) => C1 a
class (A a, B a, C a) => C2 a
instance (A a, B a, C a) => C2 a
f :: (C1 a, C2 a) => a
f = ...
Run Code Online (Sandbox Code Playgroud)
这里,C2 暗指C1,并且在签名中使用C1f是多余的,即重言式。
在现实世界的元编程的情况下,这将是waaaay更加复杂,并会显著帮助去杂波签名头,以及帮助我了解和跟踪是怎么回事的。
鉴于 GHC 的形式主义,这在逻辑上是否可行?
GHC 内的基础设施是否可用?