模块暴露在Elm 0.18中

问题描述 投票:6回答:2

我有一个类型的榆木模块,包括类型和类型别名Foo,Bar和Baz。当我导出这样的一切时,代码工作:

module Types exposing (..)

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

module Types exposing (Foo, Bar, Baz)

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

这两种方法有什么区别?

types elm
2个回答
8
投票

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

module Types exposing (Msg (..))

type Msg = FirstAction | SecondAction | ThirdAction

或者在导入联合类型的情况下。

import Types exposing (Msg (..))

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


3
投票

看看这个类型定义:

    type Foo
        = Foo
        | Baz
        | Quux

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

在你写的时候

    import Types exposing (Foo)

你只导入类型构造函数Foo。要导入Foo的数据构造函数,必须在导入类​​型构造函数后在括号中显式执行:

    import Types exposing (Foo (Foo, Baz))

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

    import Types exposing (Foo (..))
© www.soinside.com 2019 - 2024. All rights reserved.