我有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)
答案 0 :(得分:10)
这并不像你承诺的那样是单射的。采取类型
Int -> Int -> Bool
并询问:这是NAry 2 Int Bool
还是NAry 1 Int (Int -> Bool)
?