访问联盟在Elm中声明模块之外的类型

rit*_*der 6 elm

特定

--module 1
module Module1 exposing (Message) where

type Message
  = Test String
  | Error Int


--module 2
module Module2 exposing (sayTest, sayError) where

import Module1 exposing (Message)

sayTest : String -> Message
sayTest msg =
  Test msg  --error

sayError : Int -> Message
sayError code =
  Error code --error


processMessage : Message -> String
processMessage msg ->
  case msg of
    Test s -> s
    Error i -> toString i
Run Code Online (Sandbox Code Playgroud)

我如何访问TestError从模块2 访问?

目前,我必须在模块1中创建函数,当被调用时将创建所需的实例,但随着列表越来越长,这变得不切实际.

Cha*_*ert 9

您可以为导出的类型公开所有类型构造函数,如下所示:

module Module1 (Message (..)) where
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想导出几个类型构造函数,可以单独调用它们:

module Module1 (Message (Test, Error)) where

type Message
  = Test String
  | Error Int
  | Foo String
  | Bar
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,Foo和Bar构造函数对模块保持私有.