2015-10-13 1 views
4

Я новичок с Elm и как бывший программист Haskell я задаюсь вопросом, если есть способ, как в Haskell, чтобы ввести в интерпретатор/РЕПЛ:Подробная информация о случаях типа

:i number 

Так что я знаю, что это не работает в Элм, но есть кое-что эквивалентно Хаскеля:

:i Num 

Я хочу, чтобы получить подробную информацию о классе типов и всех его экземпляров.

Кроме того, в документации Haskell имеется информация о типах иерархии основных классов Haskell:

https://www.haskell.org/onlinereport/basic.html

что-то подобное для Elm тоже?

Заранее спасибо.

+2

Я не собираюсь удалять его, но я не думаю, что этот тег Haskell подходит здесь. –

+0

Вы правы. Я удалил тег. – siebenschlaefer

ответ

8

У Elm нет классов классов, поэтому на самом деле не применимо к нему, чтобы показать информацию о них, как делает GHCi :i. Объем встроенных типов Elm, таких как строки, цифры и bools, довольно очевиден.

Иерархия типа Elm довольно проста. Существуют три встроенных типа типа переменных типа. В отличие от Haskell, который устанавливает ограничения до =>, просто используйте эти переменные типа напрямую. Справедливое предупреждение: пользователи Haskell обычно используют систему типов Elm. (Экосистема инструмента также менее развита, в силе 20+ года форы в Haskell.)

  • number является либо Int или Float. Числовая буква без десятичной точки - number. Арифметика, отличная от деления, может быть выполнена либо с типом числа.
  • A comparable может быть числом, символом, строкой или рекурсивно списком или кортежем сравниваемых. Сопоставимые опоры <, >= и аналогичные.
  • appendable может быть строкой, текстом (т. Е. С помощью набора) или списком (содержащим любой тип). К добавкам можно добавить (++).
  • Тип Eq. Попытка уравнять функции или сигналы вызывает ошибку времени выполнения.

Практические последствия этого являются:

  • Строки (а иногда списки) оба appendable и сопоставимыми. Ошибка в компиляторе 0.15.1 не позволяет унифицировать их. (Это будет зафиксировано в 0,16.)
  • Если вы звоните Signal.dropRepeats по сигналу функций или контейнерам функций, он может аварийно завершить работу.
  • Поскольку словари Elm реализованы как деревья двоичного поиска, их ключи должны быть comparable. То же самое касается элементов набора.
  • Если один из этих типов появляется несколько раз в аннотации типа, все вхождения должны объединяться в один и тот же тип. Если вы хотите разрешить два разных расширения, вызовите один из них appendable1 или аналогичный.
  • Кажется, что нет способа указать, что тип должен соответствовать более чем одному из этих интерфейсов (за исключением того, что все числа сопоставимы). У меня никогда не было этого, но если это так, просто используйте конкретный тип.

Если вы хотите Haskell в браузере, попробуйте PureScript.

+0

Можете добавить 'compappend' для полноты (четвертый тип типа типа variabe) –