我对于 `number` 这个东西感到困惑。它似乎是一种类型,类似于 `Int` 和 `Float` 的上级类型,就像 java.lang.Number,但是:
并且:
- 它的拼写是小写的,因此在语法上类似于值的名称(我使用 'value' 来避免使用 'constant variable')
- 事实上我们可以声明一个名为 `number` 的值。
观察下面的例子:
> 1024
1024 : number
> 1024.0
1024 : Float
> floor(1024)
1024 : Int
让我们使用一个值的名称number
:
> number = 144
144 : number
> number
144 : number
> number = floor(144)
144 : Int
> number
144 : Int
并且:
还有:
> Result.Ok 12
Ok 12 : Result error number
> Result.Ok 12.0
Ok 12 : Result error Float
> Result.Ok (floor 12)
Ok 12 : Result error Int
number
是什么?
它是一个笨拙地命名的联合类型吗?还是语法上的不幸之处?
(奇思妙想:为什么不为“来自类型宇宙的事物”和“来自元类型宇宙的事物”分别设置特殊语法,比如↑Int
和⇈X
。由于设计上缺少注释,Elm有时很难理解。)