什么是底部类型?

时间:2017-03-06 10:50:19

标签: lambda-calculus type-theory curry-howard

在维基百科中,bottom type被简单地定义为“没有值的类型”。但是,如果此b为空类型,则产品类型(b,b)也没有值,但似乎与b不同。我同意bottom无人居住,但我不认为这个属性足以定义它。

通过Curry-Howard correspondence,底部与数学虚假相关联。现在有一个逻辑原则说明从False跟随任何命题。通过Curry-Howard,这意味着类型forall a. bottom -> a是有人居住的,即存在一系列函数f :: forall a. bottom -> a

这些功能f是什么?它们是否有助于定义底部,可能是所有类型的无限产品forall a. a

1 个答案:

答案 0 :(得分:2)

在数学中

底部是没有值的 a 类型。也就是说:任何空类型都可以扮演最底层角色。

那些f :: forall a . Bottom -> a函数是空函数。函数的集合理论定义中的“空”。

编程

为方便起见,将具体的空类型专用于编程语言库库。代码的可读性和兼容性受益于使用与底部相同的空类型的每个人。

在Haskell

让我们用更友好的名字“Bottom” - >来引用它们。 “无效”,“f” - > “荒谬”。

{-# LANGUAGE EmptyDataDecls #-}
data Void

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

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

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

它们已经是defined in package base