有关类型实例的详细信息

时间:2015-10-13 06:21:58

标签: types functional-programming read-eval-print-loop elm

我是Elm的初学者,作为一名前Haskell程序员,我想知道,如果在Haskell中有类似的方式输入解释器/ REPL:

:i number

所以我知道这在榆树中不起作用,但有些东西与Haskell相同:

:i Num

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

此外,在Haskell文档中,有关于基本Haskell类的类型层次结构的可用信息:

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

榆树也可以这样吗?

提前致谢。

1 个答案:

答案 0 :(得分:8)

Elm没有类型类,因此它不能真正适用于显示有关它们的信息,正如GHCi :i所做的那样。 Elm的内置类型(如字符串,数字和bool)的范围相当明显。

榆树的类型层次非常简单。有三个内置类型类型的变量。与将约束置于=>之前的Haskell不同,只需直接使用这些类型变量即可。公平警告:Haskell用户通常会发现Elm的类型系统限制。 (凭借Haskell 20多年的领先优势,工具生态系统也不那么先进。)

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

这样做的实际意义是:

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

如果您想在浏览器中使用Haskell,请尝试使用PureScript。