什么是底层类型?

What is the bottom type?

在维基百科中,bottom type 被简单地定义为 "the type that has no values"。但是,如果 b 是这个空类型,那么产品类型 (b,b) 也没有值,但似乎与 b 不同。我同意底部无人居住,但我不认为这个 属性 足以定义它。

根据 Curry-Howard correspondence,底部与数学错误相关联。现在有一个逻辑原则说明从 False 遵循任何命题。根据 Curry-Howard,这意味着类型 forall a. bottom -> a 是有人居住的,即存在函数族 f :: forall a. bottom -> a.

那些函数是什么f?它们是否有助于定义底部,也许是所有类型的无限乘积forall a. a

数学

底部是 a 类型,没有值。即:任何空类型都可以起到底层作用。

那些f :: forall a . Bottom -> a函数是空函数。 "empty" 中设置函数的理论定义。

编程中

为了方便,编程语言基础库专用一个具体的空类型作为底层。代码的可读性和兼容性受益于每个人都使用与 bottom 相同的空类型。

在Haskell

让我们用更友好的名字来称呼它们 "Bottom" -> "Void", "f" -> "absurd".

{-# LANGUAGE EmptyDataDecls #-}
data Void

此定义不包含任何构造函数 => 无法创建它的实例 => 它是空的。

absurd :: Bottom -> a
absurd = \ case {}

在 case 表达式中我们不必处理任何情况,因为有 none.

他们已经 defined in package base