hoo*_*rEE 2 haskell algebraic-data-types
如果我创建这样的代数数据类型:
data Foo = String
Run Code Online (Sandbox Code Playgroud)
它是什么?它似乎不是一个总和类型(它旁边没有任何东西可供选择),但也不是一个产品类型(没有任何参数可以将它与之结合起来).这里是否有一些默认值,例如"带有单个构造函数的ADT是Sum类型"?
您的类型Foo等同于单位类型(); 它是一个写入单个值的类型String,就像写入单个值()的类型一样().
任何ADT都是产品的总和.所以:
data Foo
= One Integer String
| Two String Integer
Run Code Online (Sandbox Code Playgroud)
声明Foo是(警告:实际上不是Haskell!)Integer * String + String * Integer.
如果您有0种类型的产品,那就是空产品()(就像product []是1),所以
data Bar
= Three
| Four String Integer
Run Code Online (Sandbox Code Playgroud)
宣称Bar是() + String * Integer.
当然,如果你有1种类型的总和,那就是那种类型(就像sum [x]是x:
data Baz = Five
Run Code Online (Sandbox Code Playgroud)
宣称Baz是().
所以它是一种和型,但是很简单,因为它只是一种类型的总和; 它是一种产品类型,但同样简单,因为它是0种类型的产品.
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |