Haskell中递归类型声明的函数

Haskell中递归类型声明的函数,haskell,Haskell,为了学习Haskell的微型项目,我决定制作一个确定性有限状态机程序 我认为我有一个非常聪明的方法来实现它,包括返回相同类型函数的函数。但我遇到了一个路障。我心想,我该如何做定义上如此明确的递归的事情 我顿悟了类型节点=字符->节点 遗憾的是,Haskell不允许在其类型同义词中使用递归。所以我的问题是:如何生成这样的固有递归类型?返回相同类型函数的函数的类型声明是什么?您只需将递归类型包装在newtype中即可 newtype Node = Node (Char -> Node) 您只

为了学习Haskell的微型项目,我决定制作一个确定性有限状态机程序

我认为我有一个非常聪明的方法来实现它,包括返回相同类型函数的函数。但我遇到了一个路障。我心想,我该如何做定义上如此明确的递归的事情

我顿悟了<代码>类型节点=字符->节点


遗憾的是,Haskell不允许在其类型同义词中使用递归。所以我的问题是:如何生成这样的固有递归类型?返回相同类型函数的函数的类型声明是什么?

您只需将递归类型包装在
newtype
中即可

newtype Node = Node (Char -> Node)

您只需要将递归类型包装在
newtype

newtype Node = Node (Char -> Node)

为什么要说Node before(Char->Node)?@aleeds444
节点
before
(Char->Node)
是类型构造函数的名称。定义新数据类型时需要使用类型构造函数。@Ankur否,它是数据构造函数名称。
newtype
后面的一个是类型构造函数。当我在ghci中的“Node”上使用:t时,它表示它是(Char->Node)->Node类型。这使我困惑。我认为类型应该是Char->Node。我觉得我没有正确理解这个新类型的东西。@aleeds444首先看一个更简单的非递归示例可能会有所帮助。考虑<代码> NeXType示例= WrAPCHAR char < /代码>。
WrapChar
的类型是
Char->Example
。它是
示例
类型的数据构造函数,因此它返回一个
示例
值,由于
示例
值包含一个
字符
,因此它将
字符
作为参数。请注意,该类型的名称可以与数据构造函数的名称相同,但为了清楚起见,我在这里给了它们单独的名称。为什么必须在前面说Node(Char->Node)?@aleeds444
节点在
之前(Char->Node)
是类型构造函数的名称。定义新数据类型时需要使用类型构造函数。@Ankur否,它是数据构造函数名称。
newtype
后面的一个是类型构造函数。当我在ghci中的“Node”上使用:t时,它表示它是(Char->Node)->Node类型。这使我困惑。我认为类型应该是Char->Node。我觉得我没有正确理解这个新类型的东西。@aleeds444首先看一个更简单的非递归示例可能会有所帮助。考虑<代码> NeXType示例= WrAPCHAR char < /代码>。
WrapChar
的类型是
Char->Example
。它是
示例
类型的数据构造函数,因此它返回一个
示例
值,由于
示例
值包含一个
字符
,因此它将
字符
作为参数。请注意,该类型的名称可以与数据构造函数的名称相同,但为了清楚起见,我在这里给了它们单独的名称。