0
newtype Parser a = Parser (String -> [(a,String)])
嗨,让我们考虑以上定义: 在我的眼睛,它是无限定义递归定义。比如我定义树(递归的,无限的结构),如:新类型和递归定义
data Tree a = Leaf | Node (Tree a) (Tree a).
而且Tree
可以inifinite但我们有Leaf
,它可以“完成”递归定义。所以,让我们我的第一个定义,翻译成data
: (只需更换newtype-根据https://wiki.haskell.org/Newtype)
data Parser a = Parser (String -> [(a,String)])
它是递归定义,也没有“有限元”之类Leaf
。如何理解它?
哪里是递归?您可以使用(数据)构造函数“Parser”定义一个类型(构造函数)“Parser”。定义的类型不会出现在右侧。 – d8d0d65b3f7cf42
'数据树a = Leaf |节点(树a)(树a)。这里有递归吗? – Gilgamesz
另外,在语义上,'newtype'和'data'没有区别,所以你没有真正做过任何不同的事情。 – Emil