在 Elm 中声明模块之外访问联合类型
Access Union Types outside of declaring module in 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
如何从模块 2 访问 Test
和 Error
?
目前,我必须在模块 1 中创建函数,调用时将创建所需的实例,但随着列表越来越长,这变得不切实际。
您可以像这样公开导出类型的所有类型构造函数:
module Module1 (Message (..)) where
或者,如果您只想导出几个类型构造函数,您可以单独调用它们:
module Module1 (Message (Test, Error)) where
type Message
= Test String
| Error Int
| Foo String
| Bar
在上面的代码中,Foo 和 Bar 构造函数对模块保持私有。
给出
--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
如何从模块 2 访问 Test
和 Error
?
目前,我必须在模块 1 中创建函数,调用时将创建所需的实例,但随着列表越来越长,这变得不切实际。
您可以像这样公开导出类型的所有类型构造函数:
module Module1 (Message (..)) where
或者,如果您只想导出几个类型构造函数,您可以单独调用它们:
module Module1 (Message (Test, Error)) where
type Message
= Test String
| Error Int
| Foo String
| Bar
在上面的代码中,Foo 和 Bar 构造函数对模块保持私有。