什么是底层类型?
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.
在维基百科中,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.