无法公开UnionType

时间:2018-08-15 12:47:04

标签: elm union-types

我有两个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 of declaring module in Elm

在相关情况下,我使用elm 0.18.0。

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

1 个答案:

答案 0 :(得分:2)

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

type Module2Msg
    = ...
    | Module1Msg Module1.OneMsg

然后您可以在Module2中像这样使用它:

Html.map Module1Msg (Module1.view model)