无法识别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的