模块暴露在Elm 0.18中

时间:2017-09-10 00:37:43

标签: types elm

我有一个类型的elm模块,它由类型和类型别名Foo,Bar和Baz组成。当我导出所有这样的代码时,代码可以工作:

module Types exposing (..)

但是,如果我明确包含所有类型,则代码会中断。

module Types exposing (Foo, Bar, Baz)

消费文件上的import语句也是如此;两者都需要exposing (..)

这两种方法有什么区别?

2 个答案:

答案 0 :(得分:8)

我最近才自己学习榆树,但听起来好像你的一个类型(Msg)被定义为一个联合类型,你需要使用Msg(..)语法导出此类型时。

module Types exposing (Msg (..))

type Msg = FirstAction | SecondAction | ThirdAction

或者导入联合类型。

import Types exposing (Msg (..))

请参阅GitHub issue #968,了解为什么工会类型需要这样做。

答案 1 :(得分:3)

查看此类型定义:

Foo

您会看到两个 import Types exposing (Foo) :前一个是类型构造函数,后者是数据构造函数。类型构造函数和数据构造函数位于不同的名称空间中,因此您可以为两者使用相同的名称。

写作时

Foo

您要导入类型构造函数 Foo 。要导入 import Types exposing (Foo (Foo, Baz)) 的数据构造函数,必须在导入类​​型构造函数后在括号中显式地执行此操作:

    import Types exposing (Foo (..))

或者,如果要导入此类型的所有数据构造函数:

v::optional(v::Phone())->validate($phoneNumber);