Haskell中递归类型声明的函数
为了学习Haskell的微型项目,我决定制作一个确定性有限状态机程序 我认为我有一个非常聪明的方法来实现它,包括返回相同类型函数的函数。但我遇到了一个路障。我心想,我该如何做定义上如此明确的递归的事情 我顿悟了<代码>类型节点=字符->节点Haskell中递归类型声明的函数,haskell,Haskell,为了学习Haskell的微型项目,我决定制作一个确定性有限状态机程序 我认为我有一个非常聪明的方法来实现它,包括返回相同类型函数的函数。但我遇到了一个路障。我心想,我该如何做定义上如此明确的递归的事情 我顿悟了类型节点=字符->节点 遗憾的是,Haskell不允许在其类型同义词中使用递归。所以我的问题是:如何生成这样的固有递归类型?返回相同类型函数的函数的类型声明是什么?您只需将递归类型包装在newtype中即可 newtype Node = Node (Char -> Node) 您只
遗憾的是,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
。它是示例
类型的数据构造函数,因此它返回一个示例
值,由于示例
值包含一个字符
,因此它将字符
作为参数。请注意,该类型的名称可以与数据构造函数的名称相同,但为了清楚起见,我在这里给了它们单独的名称。