【发布时间】:2014-03-29 08:51:11
【问题描述】:
我目前正在学习 Haskell,所以这里有一个初学者的问题:
下文中单一类型是什么意思?
单一类型是一个特殊的 Haskell 术语吗?这里的意思是原子类型吗?
或者这是否意味着我永远无法在 Haskell 中列出我可以同时放入 1 和 'c' 的列表?
我认为类型是一组值。
所以我不能定义包含Chars 和Ints 的类型?
代数数据类型呢?
类似:data IntOrChar = In Int | Ch Char ? (我想这应该可行,但我对作者这句话的意思感到困惑。)
顺便说一句,这是在 Haskell 中创建一个列表的唯一方法,我可以在其中同时放入 Ints 和 Chars?还是有更棘手的方法?
一个 Scala 类比:在 Scala 中,可以将隐式转换写入同时代表 Ints 和 Chars 的类型(如 IntOrChar),然后可以无缝地放置 Int s 和 Chars 到 List[IntOrChar],这对 Haskell 来说是不可能的吗?如果我想将每个Int 或Char 放入IntOrChar 中,是否总是必须明确地将它们放入IntOrChar 的列表中?
Haskell 还包含多态类型—— 以某种方式对所有类型进行普遍量化。多态型 表达式本质上描述了类型族。例如, (forall a)[a] 是类型族,对于每个类型 a, a 的列表类型。整数列表(例如 [1,2,3]), 字符(['a','b','c']),甚至整数列表等,都是 这个家庭的所有成员。 (但请注意,[2,'b'] 不是 有效的例子,因为没有单一类型同时包含 2 和 'b'。)
【问题讨论】:
-
您的
[IntOrChar]不是[2, 'b'],而是[In 2, Ch 'b']。 -
是的,所以我不能创建联合类型?
-
不,
single type不是 Haskell 术语。 “Single”是一个普通的英文单词,意思是“只有一个;不是几个中的一个”。IntOrChar是联合类型。