在维基百科中,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
?
答案 0 :(得分:2)
在数学中
底部是没有值的 a 类型。也就是说:任何空类型都可以扮演最底层角色。
那些f :: forall a . Bottom -> a
函数是空函数。函数的集合理论定义中的“空”。
编程
为方便起见,将具体的空类型专用于编程语言库库。代码的可读性和兼容性受益于使用与底部相同的空类型的每个人。
在Haskell
让我们用更友好的名字“Bottom” - >来引用它们。 “无效”,“f” - > “荒谬”。
{-# LANGUAGE EmptyDataDecls #-}
data Void
此定义不包含任何构造函数=>无法创建它的实例=>它是空的。
absurd :: Bottom -> a
absurd = \ case {}
在case表达式中,我们不必处理任何情况,因为没有。