我有一个类型的榆木模块,包括类型和类型别名Foo,Bar和Baz。当我导出这样的一切时,代码工作:
module Types exposing (..)
但是,如果我明确包含所有类型,则代码会中断。
module Types exposing (Foo, Bar, Baz)
消费文件上的import语句也是如此;两者都需要是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 (..))