假设我们有一些现有的类或约束C
,以及以下内容:
{-# TypeFamilyDependencies #-}
type family F t = s | s -> t
type D s = (s ~ T t, C t)
当然type D s ...
由于未知变量t
而无法编译,但我如何编写D s
之类的内容?我基本上想写:
type D s = (C (T_Inverse s))
我认为应该有效,因为存在注入T_Inverse
。我只是不知道如何表达它。
答案 0 :(得分:5)
我知道该怎么做才是
type family FI a
type D s = (s ~ F (FI s), C (FI s))
你必须自己形成(可能是部分的)部分FI
,所以我不认为内射型家庭确实有帮助。在这一点上,内射型家庭似乎非常有限且不自然。举一个明显的例子,GHC甚至不会接受它们是单射的!
blah :: F a ~ F b => a :~: b
blah = Refl
未通过类型检查程序。