我有一个跨多个模块的应用程序.首先,我模拟我的问题,创建几种数据类型.在第二个,我正在提出意见.
其中一种类型是标记的联合类型:
type alias Letter = Char
type GuessedLetter = Guessed Letter | Unguessed
Run Code Online (Sandbox Code Playgroud)
在我的View模块中,我有一个显示字母的功能:
guessToChar : GuessedLetter -> Char
guessToChar guess =
case guess of
Guessed l -> l
Unguessed -> '_'
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译这些文件时,我收到以下错误:
## 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.
Run Code Online (Sandbox Code Playgroud)
我想"也许我应该导出标签以及类型?",但是既没有将标签添加到模块导出也没有尝试完全限定标签(GuessedLetter.Guessed)已经解决了问题.
我该如何修复这个功能?
and*_*ich 13
我怀疑,如果你想在模块外部使用标签,你也必须将它们导出.(我只是不确定如何).
为此,请在括号内的逗号分隔列表中添加标记.
从源代码Maybe(以我希望的方式'工作'的类型):
module Maybe exposing
( Maybe(Just,Nothing)
, andThen
, map, map2, map3, map4, map5
, withDefault
, oneOf
)
Run Code Online (Sandbox Code Playgroud)
或者在我的情况下:
module Game exposing (Letter, GuessedLetter(Guessed, Unguessed))
在导入方面,您可以选择完全限定标签(使用模块,而不是类型):
import Game exposing GuessedLetter
{- ... -}
guessToChar : GuessedLetter -> Char
guessToChar guess =
case guess of
Game.Guessed l -> l
Game.Unguessed -> '_'
Run Code Online (Sandbox Code Playgroud)
或者公开标签:
import Game exposing GuessedLetter(Guessed, Unguessed)
{- ... -}
guessToChar : GuessedLetter -> Char
guessToChar guess =
case guess of
Guessed l -> l
Unguessed -> '_'
Run Code Online (Sandbox Code Playgroud)