在 Elm 0.18 中公开的模块
Module exposing in Elm 0.18
我有一个类型的 elm 模块,它由类型和类型别名 Foo、Bar 和 Baz 组成。当我像这样导出所有内容时,代码有效:
module Types exposing (..)
但是,如果我明确包含所有类型,代码就会中断。
module Types exposing (Foo, Bar, Baz)
消费文件上的导入语句也是如此;两者都需要 exposing (..)
这两种方法有什么区别?
我自己最近才开始学习 Elm,但听起来您的一种类型 (Msg
) 被定义为联合类型,因此您需要使用 Msg(..)
语法导出此类型时。
module Types exposing (Msg (..))
type Msg = FirstAction | SecondAction | ThirdAction
或者在导入联合类型的情况下。
import Types exposing (Msg (..))
请参阅 GitHub issue #968 以了解联合类型为何需要这样做的解释。
看看这个类型定义:
type Foo
= Foo
| Baz
| Quux
你看到两个Foo
:前一个是类型构造器,后者是数据构造器。类型构造函数和数据构造函数位于不同的命名空间中,因此您可以为两者使用相同的名称。
如你所写
import Types exposing (Foo)
您正在导入 类型构造函数 Foo
仅。要导入 Foo
的数据构造函数,您必须在导入类型构造函数后在括号中明确地执行此操作:
import Types exposing (Foo (Foo, Baz))
或者,如果您想导入该类型的所有数据构造函数:
import Types exposing (Foo (..))
我有一个类型的 elm 模块,它由类型和类型别名 Foo、Bar 和 Baz 组成。当我像这样导出所有内容时,代码有效:
module Types exposing (..)
但是,如果我明确包含所有类型,代码就会中断。
module Types exposing (Foo, Bar, Baz)
消费文件上的导入语句也是如此;两者都需要 exposing (..)
这两种方法有什么区别?
我自己最近才开始学习 Elm,但听起来您的一种类型 (Msg
) 被定义为联合类型,因此您需要使用 Msg(..)
语法导出此类型时。
module Types exposing (Msg (..))
type Msg = FirstAction | SecondAction | ThirdAction
或者在导入联合类型的情况下。
import Types exposing (Msg (..))
请参阅 GitHub issue #968 以了解联合类型为何需要这样做的解释。
看看这个类型定义:
type Foo
= Foo
| Baz
| Quux
你看到两个Foo
:前一个是类型构造器,后者是数据构造器。类型构造函数和数据构造函数位于不同的命名空间中,因此您可以为两者使用相同的名称。
如你所写
import Types exposing (Foo)
您正在导入 类型构造函数 Foo
仅。要导入 Foo
的数据构造函数,您必须在导入类型构造函数后在括号中明确地执行此操作:
import Types exposing (Foo (Foo, Baz))
或者,如果您想导入该类型的所有数据构造函数:
import Types exposing (Foo (..))