如何在haskell中递归数据类型

时间:2017-11-21 16:39:25

标签: haskell types

我如何做这样的数据类型:

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

1 个答案:

答案 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 []