无法识别Haskell数据类型
我得到了这个密码:无法识别Haskell数据类型,haskell,types,Haskell,Types,我得到了这个密码: data Station a b = Machine a b | Line [Station a b] deriving(Show) data Machine a b = Req [(a,Int)] b deriving(Show) machine :: [(a, Int)] -> b -> Station a b machine l b = Req l b 当我试图编译时,它说机器的签名是错误的。它说它是
data Station a b = Machine a b
| Line [Station a b]
deriving(Show)
data Machine a b = Req [(a,Int)] b
deriving(Show)
machine :: [(a, Int)] -> b -> Station a b
machine l b = Req l b
当我试图编译时,它说机器的签名是错误的。它说它是[(a,Int)]->b->Machine a b,而不是[(a,Int)]->b->Station a b。但在我的数据类型中,我说工作站AB=机器AB。我不明白为什么这行不通?你有两个东西叫做
机器。一个是返回站
类型的类型构造函数,另一个是类型构造函数。这两个人没有关系,尽管他们有着相同的名字
通过向数据构造函数添加”
(prime)来消除这两个术语的歧义可能会有所帮助。这样,我们可以将机器
数据构造函数绑定为将机器
作为其唯一参数:
数据站a b=机器(机器a b)
|线〔a b站〕
派生(显示)
现在我们可以更新machine
函数以使用新定义的构造函数:
machine::[(a,Int)]->b->a站b站
机器l b=机器(需要l b)
你有两件东西叫做机器
。一个是返回站
类型的类型构造函数,另一个是类型构造函数。这两个人没有关系,尽管他们有着相同的名字
通过向数据构造函数添加”
(prime)来消除这两个术语的歧义可能会有所帮助。这样,我们可以将机器
数据构造函数绑定为将机器
作为其唯一参数:
数据站a b=机器(机器a b)
|线〔a b站〕
派生(显示)
现在我们可以更新machine
函数以使用新定义的构造函数:
machine::[(a,Int)]->b->a站b站
机器l b=机器(需要l b)
啊,我明白了,谢谢!我误以为“机器”是一样的。谢谢你为我清理这些me@Midasso作为将来的参考,这是Haskell的
。啊,我明白了,谢谢!我误以为“机器”是一样的。谢谢你为我清理这些me@Midasso作为将来的参考,它是Haskell的
。