我have an app跨越多个模块。首先,我模拟我的问题,创建几种数据类型。第二,我正在提出意见。
其中一种类型是标记的联合类型:
guessToChar : GuessedLetter -> Char
guessToChar guess =
case guess of
Guessed l -> l
Unguessed -> '_'
在我的View模块中,我有一个显示字母的功能:
## ERRORS in src/Views.elm #####################################################
-- NAMING ERROR -------------------------------------------------- src/Views.elm
Cannot find pattern `Guessed`
21| Guessed l -> l
^^^^^^^^^
-- NAMING ERROR -------------------------------------------------- src/Views.elm
Cannot find pattern `Unguessed`
22| Unguessed -> '_'
^^^^^^^^^
Detected errors in 1 module.
但是当我尝试编译这些文件时,我收到以下错误:
GuessedLetter.Guessed
我想“也许我应该导出标签以及类型?”,但是都没有将标签添加到模块导出,也没有尝试完全限定标签(a b
-----
1 1
2 0
1 0
1 0
1 1
2 0
2 0
3 0
3 1
3 0
)解决了这个问题。
如何修复此功能?
答案 0 :(得分:13)
我怀疑,如果您想使用模块外部的标签,则必须将其导出。 (我只是不确定如何)。
为此,请在括号内的逗号分隔列表中添加标记。
来自the source code for Maybe
(一种“按我想要的方式工作”的类型):
module Maybe exposing
( Maybe(Just,Nothing)
, andThen
, map, map2, map3, map4, map5
, withDefault
, oneOf
)
或者就我而言:
module Game exposing (Letter, GuessedLetter(Guessed, Unguessed))
在导入方面,您可以选择完全限定标记(使用模块,而不是类型):< / p>
import Game exposing GuessedLetter
{- ... -}
guessToChar : GuessedLetter -> Char
guessToChar guess =
case guess of
Game.Guessed l -> l
Game.Unguessed -> '_'
或曝光标签:
import Game exposing GuessedLetter(Guessed, Unguessed)
{- ... -}
guessToChar : GuessedLetter -> Char
guessToChar guess =
case guess of
Guessed l -> l
Unguessed -> '_'