函数依赖和重叠实例

问题描述

我有一个带基金的类型类:

{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE FlexibleInstances #-}

class C a b | a -> b

我想提供具体实例:

instance C A B

以及一般的默认实例:

instance C a D

按照编写的方式实现此代码,将无法编译:

Functional dependencies conflict between instance declarations:
  instance C A B
  instance C a D

切换到字体系列无济于事:

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeFamilies #-}

class C a where
  type C' a

instance C A where
  type C' A = B


instance C a where
  type C' a = D
Conflicting family instance declarations:
  C' A = B
  C' a = D

理想情况下,我想让 GHC 使用 OverlappingInstances 的“最具体”规则来解决这个问题。

我知道这是一个已经存在一段时间的问题,并提出了各种hacky解决方案:

当前 GHC Haskell 中最好的推荐解决方案是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)