newtype Parser a = Parser (String -> [(a,String)])嗨,让我们考虑上面的定义:在我看来,这是无限的定义--递归定义。例如,我定义了树(递归的无限结构)如下:
data Tree a = Leaf | Node (Tree a) (Tree a).Tree可以是不有限的,但是我们有Leaf,它可以“完成”递归定义。那么,让我们将我的第一个定义转换为data:(只需替换newtype-根据https://wiki.haskell.org/Newtype )
data Parser a = Parser (String -> [(a,String)])而且它是递归定义,没有像Leaf那样的“有限元”。如何理解它?
发布于 2016-04-18 17:13:12
您的Parser定义实际上不是递归的。在=标志的右边是constructor。构造函数可以具有与其类型相同的名称,但这两件事是不同的概念。
您可以调用解析器构造函数--其他的东西--而不会失去任何功能:
data Parser a = Foo (String -> [(a, String)])Tree类型有两个构造函数,Leaf和Node。使它成为递归的是,Node的定义递归地包含两个类型的参数,它们都是Tree。
https://stackoverflow.com/questions/36699939
复制相似问题