【发布时间】:2017-01-27 17:10:40
【问题描述】:
在 Idris 中,Maybe 类型定义如下:
data Maybe a = Just a | Nothing
Haskell 中的定义类似:
data Maybe a = Just a | Nothing
deriving (Eq, Ord)
这是机器学习版本:
datatype 'a option = NONE | SOME of 'a
使用Just 和Some 有什么好处?
为什么不定义没有它们的类型?
示例:
data Maybe a = a | Nothing
【问题讨论】:
-
data Maybe a = a | Nothing不是有效的 Haskell——它不会编译。该定义将有效地暗示Maybe a是任何值的联合 或Nothing,但这毫无用处,因为Nothing也是“任何值”。 (Haskell 的类型系统根本不支持这样的无标签联合,因为这需要一些“子类型”的概念,而 Haskell 没有。) -
不,
Maybe a将是a或Nothing的并集,而Nothing通常不是a类型的值,因此像Maybe Int这样的类型不会不要没用。更正 Haskell 不支持这一点。
标签: haskell types ml idris maybe