我如何做这样的数据类型:
data Xpto = String [Xpto ]
insertHead :: String -> Xpto
insertHead s = s []
我收到了这条消息:
Type error in application
*** Expression : s []
*** Term : s
*** Type : [Char]
*** Does not match : a -> b
答案 0 :(得分:3)
这与数据类型是递归的事实无关。您无法定义小写数据类型。类型以大写开头。
此外你必须定义构造函数,这里最直接的构造函数也可能是Xpto
(构造函数也以upercase开头)。
所以写一下:
data Xpto = Xpto String [Xpto]
-- ^ constructor
insertHead :: String -> Xpto
insertHead s = Xpto s []
-- ^ apply the data constructor
或者我们可以使用insertHead
:
flip
无点免费
insertHead :: String -> Xpto
insertHead = flip Xpto []