【问题标题】:What does Uppercased term inside union means in Elm?Union 中的大写术语在 Elm 中意味着什么?
【发布时间】:2022-11-30 05:09:26
【问题描述】:

我正在阅读与语法相关的 Elm documentation,并偶然发现了这个 sn-p:

type User
  = Regular String Int
  | Visitor String

RegularVisitor 是什么类型?另一种以前从未定义过的类型?还是一个功能?

它确实像一个函数调用,但参数是一个类型,它看起来不像函数签名,因为没有->

【问题讨论】:

    标签: syntax elm


    【解决方案1】:

    这记录在 Elm Guide 的相关部分(请注意,这是从您在问题中链接到的语法指南中的部分链接到的),但我承认它对初学者来说并不像它那么清楚应该。

    在您的示例中,RegularVisitor 确实是函数,而不是类型。 (在 Haskell 和 PureScript 中,它们将被称为“(数据)构造函数”,它本质上可以用作常规函数,但具有可用于定义它们的类型的模式匹配的额外功能。Elm 有很多差异来自这两种语言,但有很多相同的根源,实际上你也可以在 Elm 中以这种方式做 pattern matching。)

    我链接到的页面上的 REPL 示例证明了这一点,以下是逐字复制和粘贴的内容:

    > type User
    |   = Regular String Int
    |   | Visitor String
    | 
    
    > Regular
    <function> : String -> Int -> User
    
    > Visitor
    <function> : String -> User
    

    就像 Elm 中的所有函数(同样在 Haskell 等中)一样,这些函数会自动柯里化,因此在您的示例中,Regular "something"Int -&gt; User 类型的函数。

    如您所见,“它看起来不像函数签名”——事实并非如此。这不是您定义典型函数的方式。它是自定义数据类型的定义,然后免费为您提供这些“构造函数”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多