从《Haskell编程》(http://www.cs.nott.ac.uk/~gmh/book.html)一书中定义了一个解析器:
> type Parser a = String -> [(a,String)]
然而,从示例代码(http://www.cs.nott.ac.uk/~gmh/Parsing.lhs)来看,定义略有不同。
> newtype Parser a = P (String -> [(a,String)])
我从这个页面https://wiki.haskell.org/Type#Type_and_newtype找到了以下不同:
type引入了类型的同义词并使用相同的数据构造函数。newtype引入了类型的重命名,需要您提供新的构造函数。
以下是我的问题:
- 为什么在new type中要使用
P(...)
来括起内容? - 使用newtype需要提供新的构造函数,但是我在示例代码中找不到一个。如何定义newtype的构造函数?不提供构造函数可以吗?
P
是新的构造函数。 - Daniel Wagner