Что такое "число" в вязе - PullRequest
0 голосов
/ 06 октября 2018

Я запутался в number.Кажется, что это тип, похожий на супертип Int и Float, например java.lang.Number , но:

  • Он написан строчными итаким образом, синтаксически похож на имя значения (я использую 'значение', чтобы избежать использования обозначения 'постоянная переменная')
  • Фактически можно объявить значение с именем 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. Вяза, по замыслу бедных по аннотациям иногда трудно расшифровать.)

1 Ответ

0 голосов
/ 06 октября 2018

Из того, что я понимаю, number - это своего рода класс встроенных типов, похожий на интерфейс в Java, который описывает, какие операции могут выполняться над типами, реализующими интерфейс.Но если в Java интерфейс с точки зрения потребителя задан как обычный тип, класс типа представляет собой ограничение на переменную типа, определяемое соглашением с использованием имен переменных «магического» типа, таких как number или comparable.

В языках с «правильной» поддержкой классов типов, таких как Haskell, вы должны указывать ограничение отдельно, т.е. Number a => a -> a.Но в Elm, имеющем всего несколько встроенных классов типов, бремя необходимости изучать концепцию и синтаксис для этого, чтобы иметь возможность использовать несколько довольно интуитивно понятных классов встроенных типов, я считаю ненужным.Хотя вы, вероятно, не будете интуитивно понимать, что именно это означает, вы должны понимать это достаточно хорошо, чтобы хотя бы использовать большинство функций, принимающих number s или comparable s в качестве аргументов.Его точное значение может быть объяснено позже (хотя я иногда задаюсь вопросом, насколько позже будет официальное объяснение ...).

Я надеюсь, что это достаточно ответит на ваш вопрос, но дайте мне знать, если это все ещенеясно.

...