这种类型的家庭是单独的吗?

时间:2017-02-09 18:40:34

标签: haskell type-families

我有N-ary函数的类型系列,从类型n的{​​{1}}个参数到类型t的值:

o

我认为这个家庭应该是不可能的,因为我无法向GHC证明这一点:

type family NAry (n :: Nat) (t :: Type) (o :: Type) = (r :: Type) | r -> n t o where
    NAry 1 t o = t -> o
    NAry n t o = t -> (NAry (n - 1) t o)

1 个答案:

答案 0 :(得分:10)

这并不像你承诺的那样是单射的。采取类型

Int -> Int -> Bool

并询问:这是NAry 2 Int Bool还是NAry 1 Int (Int -> Bool)