我有两个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。
打赌我只是错过了一些东西。有人可以发现问题吗?
答案 0 :(得分:2)
Module1.OneMsg
是一种类型。 Html.map
期望函数作为其第一个参数。您通常使消息冒泡的方式如下(在Module2
中):
type Module2Msg
= ...
| Module1Msg Module1.OneMsg
然后您可以在Module2
中像这样使用它:
Html.map Module1Msg (Module1.view model)