有关类型实例的详细信息

Detailed information about type instances

我是 Elm 的初学者,作为一名前 Haskell 程序员,我想知道是否有像 Haskell 这样的方法来输入 interpreter/REPL:

:i number

所以我知道这在 Elm 中不起作用,但是是否有等同于 Haskell 的东西:

:i Num

我想获取有关类型 class 及其所有实例的详细信息。

此外,在 Haskell 文档中有关于基本 Haskell classes:

类型层次结构的信息

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

Elm 也有类似的东西吗?

提前致谢。

Elm 没有类型 classes,因此它并不像 GHCi 的 :i 那样真正适用于显示有关它们的信息。 Elm 的内置类型(如字符串、数字和布尔值)的范围相当明显。

Elm 的类型层次非常简单。有 3 个内置的 type-class-like 类型变量。不像 Haskell 将约束放在 => 之前,直接使用这些类型变量即可。公平警告:Haskell 用户通常会发现 Elm 的类型系统存在限制。 (凭借 Haskell 20 多年的领先优势,工具生态系统也不太先进。)

  • A numberIntFloat。没有小数点的数字文字是 number。除除法以外的算术可以对任何一种数字类型进行。
  • A comparable 可以是数字、字符、字符串,或者递归地是可比较项的列表或元组。 Comparables 支持 <>= 和类似的。
  • appendable可以是字符串、文本(即带有排版信息)或列表(包含任何类型)。 Appendables可以附加(++).
  • 没有Eq类型。尝试使函数或信号相等会导致运行时错误。

其实际意义是:

  • 字符串(有时是列表)是可附加的和可比较的。 0.15.1 编译器中的一个错误阻止了它们的统一。 (这将在 0.16 中修复。)
  • 如果您在函数信号或函数容器上调用 Signal.dropRepeats,它可能会崩溃。
  • 因为 Elm 的字典是作为二叉搜索树实现的,所以它们的键必须是 comparable。集合元素也是如此。
  • 如果这些类型之一在类型注释中多次出现,则所有出现必须统一为同一类型。如果你想允许两个不同的 appendables,调用其中之一 appendable1 或类似的。
  • 似乎没有办法指定一个类型必须满足不止一个这些接口(除了所有数字都是可比较的)。我从来没有遇到过这种情况,但如果出现这种情况,请使用具体类型。

如果你想在浏览器中 Haskell,试试 PureScript。