榆木底
今天,我看到了一个Reddit线程,有人将Elm的Never类型称为Elm的底部 。 对于不知道bottom含义的人来说, bottom的数学符号是⊥,您可以将其视为存在于每种类型中的特殊值 ,该值用于表示永远不会成功完成的计算,包括由于失败导致的失败。某种错误或无限循环。 知道了这一点,我们可以立即注意到Elm的Never不能是⊥,因为前者是类型,而后者是值(至少在没有类型层次结构的语言中)。 Elm’s Never是一种无人居住的类型,与您可能认为的相反,它对于表示无法发生的荒谬事物非常有用,例如,一个不能被调用的函数: f:从不-> a 该类型签名告诉我们必须使用永不类型的值来调用该函数,但是我们不能,因为没有这样的值( f是Elm定义为永不的值)。 因此,如果Elm永远不是最低谷,这是否意味着Elm没有底部? 好吧,它必须有一个,因为没有它,编译器可以解决暂停问题,但是与Haskell不同,Haskell为provides提供了一个预先定义的名称,称为a类型的 undefined ,Elm没有a类型的值。 但是相反,我们可以拥有类型b的值→意味着对于我们赋予它的任何b值,都会返回一个底值! 以下代码将被编译,但在执行时会因无限循环而失败:…