首页 > 解决方案 > 无法公开 UnionType

问题描述

我有两个 elm 模块试图共享一个联合类型,因为我尝试按照此处所述重构我的应用程序https://www.elm-tutorial.org/en-v01/02-elm-arch/07-composing-2.html但我不断得到

不暴露

即使我尝试将其建模为https://github.com/elm/elm-lang.org/issues/523

模块 1

module Module1 exposing ( OneMsg(..), Model, view, [etc.] )

...

type OneMsg
    = Name String 

...

模块 2

module Module2 exposing(..)

import Module1 exposing(OneMsg(..))


type Msg
    = UrlChange Navigation.Location 
    | ...
    | Module1Msg Module1.OneMsg

...

Html.map Module1.OneMsg (Module1.view model)

...

收到此错误

   -- NAMING ERROR ---------------------------------------------- ././view/View.elm

   Cannot find variable `Module1.OneMsg`.

   74|                     Html.map Module1.OneMsg (Module1.view model)
                                    ^^^^^^^^^^^^^^^^^^
   `Module1` does not expose `OneMsg`.

我在这里发现的唯一一件事是一个旧问题,虽然旧语法似乎是同一个事件: Access Union Types outside declaring module in Elm

如果相关,我使用 elm 0.18.0。

打赌我只是错过了一些东西。任何人都可以发现问题吗?

标签: elmunion-types

解决方案


Module1.OneMsg是一种类型。Html.map期望一个函数作为它的第一个参数。您通常会冒泡消息的方式是这样的(在 中Module2):

type Module2Msg
    = ...
    | Module1Msg Module1.OneMsg

然后你可以像这样使用它Module2

Html.map Module1Msg (Module1.view model)

推荐阅读