【发布时间】:2022-07-28 02:51:07
【问题描述】:
我正在尝试构建一个自定义类别:
type Cat i = i -> i -> Type
class Category (h :: Cat i) where
id :: h a a
(.) :: h b c -> h a b -> h a c
-------------------------------------------------
data HFun (l :: [Type]) (l' :: [Type]) where
HFunNil :: HFun '[] '[]
(:->:) :: (a -> b) -> HFun as bs -> HFun (a ': as) (b ': bs)
class Id x where
id :: x
instance Id (HFun '[] '[]) where
id = HFunNil
instance Id (HFun l l) => Id (HFun (a ': l) (a ': l)) where
id = Pr.id :->: id
instance Category HFun where
id = id
但这无法编译:没有因使用“id”而产生的 (Id (HFun a a)) 实例 :(非常感谢任何帮助/建议
【问题讨论】:
-
您报道了
a=[]和a=(b:l)的案例。这直观地涵盖了所有情况,但 GHC 不会接受,而是需要一个实例Id (HFun a a)(或更通用的实例,Id (HFun a1 a2))。我不确定如何解决这个问题。 -
您能否提供一个完整的示例供我们测试?
标签: haskell