首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新类型和递归定义

新类型和递归定义
EN

Stack Overflow用户
提问于 2016-04-18 16:55:31
回答 1查看 186关注 0票数 0
代码语言:javascript
复制
newtype Parser a = Parser (String -> [(a,String)])

嗨,让我们考虑上面的定义:在我看来,这是无限的定义--递归定义。例如,我定义了树(递归的无限结构)如下:

代码语言:javascript
复制
data Tree a = Leaf | Node (Tree a) (Tree a).

Tree可以是不有限的,但是我们有Leaf,它可以“完成”递归定义。那么,让我们将我的第一个定义转换为data:(只需替换newtype-根据https://wiki.haskell.org/Newtype )

代码语言:javascript
复制
data Parser a = Parser (String -> [(a,String)])

而且它是递归定义,没有像Leaf那样的“有限元”。如何理解它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-18 17:13:12

您的Parser定义实际上不是递归的。在=标志的右边是constructor。构造函数可以具有与其类型相同的名称,但这两件事是不同的概念。

您可以调用解析器构造函数--其他的东西--而不会失去任何功能:

代码语言:javascript
复制
data Parser a = Foo (String -> [(a, String)])

Tree类型有两个构造函数,LeafNode。使它成为递归的是,Node的定义递归地包含两个类型的参数,它们都是Tree

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36699939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档