从另一个模块公开和导入数据构造函数

Exposing and importing a data constructor from another module

在我的 Elm 程序中,我想在一个模块中定义一个类型:

MyModule.elm:

module MyModule exposing (MyType)
type MyType = Constr1 String | Constr2 Int

并在另一个模块中构造一个这种类型的值:

Main.elm:

import MyModule exposing (MyType)
import Html exposing (text)
main =
    let x = Constr1 "foo" in
        text "hello"

当我构建它时:

elm-package install elm-lang/html && elm-make Main.elm

我得到:

NAMING ERROR ------------------------------------------------------- Main.elm

Cannot find variable `Constr1`

6|     let x = Constr1 "foo" in
               ^^^^^^^


Detected errors in 1 module.     

如果我在两个 exposing 子句中都使用 (..),这编译得很好,但我想知道如何表达我想公开构造函数。

旁注:我还想知道我应该在文档中的什么地方找到它。

您可以像这样指定要公开的构造函数:

module MyModule exposing (MyType(Constr1, Constr2))

可以使用 (..) 表示法公开一个类型的所有构造函数:

module MyModule exposing (MyType(..))

如果您不想公开任何构造函数(意味着您有其他公开的函数可以创建您的类型的值,您只需指定类型:

module MyModule exposing (MyType, otherFunctions)

elm-community.github.io/elm-faq

上有关于此主题的社区文档