【发布时间】:2018-06-04 09:53:00
【问题描述】:
您好,我编写了我的第一个类型为 family 的程序
{-# LANGUAGE TypeFamilies #-}
data Colist a = Colist (Maybe (a,Colist a))
class Listable l where type Item l :: *
toList :: l -> [Item l]
instance Listable (Colist a) where
type Item (Colist a) = (Colist a)
toList x = [x]
程序应该将 Colist a 放入列表中 我收到“项目 l”无法与实际类型“l”匹配的错误。但我写的是 Item x EQUALS (Colist a)。我的错在哪里?
【问题讨论】:
-
我想你的意思是
type Item (Colist a) = a。您可能的意思是toList是Listable的一种方法? -
如果你想要一个好的解释,你需要包含导致错误的代码。此代码加载得很好(在修复缩进错误之后)。这就是说:这是因为,像所有类型族的初学者一样,您还没有理解“类型族不是单射的”是什么意思。
-
imgur.com/a/bIjXI 我收到此错误
-
不要在 SO 上发布文本图像 - 将实际的错误文本消息复制并粘贴到您的问题中,这样每个人都会注意到并立即阅读。将重要信息隐藏在图片链接下可以减少其他人直接跳过问题而没有提供任何帮助的可能性。
标签: haskell types functional-programming type-families