Elm &引用;“找不到模式”;使用标记的联合类型时

Elm &引用;“找不到模式”;使用标记的联合类型时,elm,Elm,我知道它跨越多个模块。首先,我对问题进行建模,创建了几种数据类型。在第二部分中,我提出了观点 其中一种类型是标记的联合类型: type alias Letter = Char type GuessedLetter = Guessed Letter | Unguessed 在我的视图模块中,我有一个显示字母的功能: guessToChar : GuessedLetter -> Char guessToChar guess = case guess of Guessed l -&

我知道它跨越多个模块。首先,我对问题进行建模,创建了几种数据类型。在第二部分中,我提出了观点

其中一种类型是标记的联合类型:

type alias Letter = Char
type GuessedLetter = Guessed Letter | Unguessed
在我的视图模块中,我有一个显示字母的功能:

guessToChar : GuessedLetter -> Char
guessToChar guess =
  case guess of
    Guessed l -> l
    Unguessed -> '_'
但当我尝试编译这些文件时,会出现以下错误:

## 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
)都没有解决这个问题


如何修复此功能?

正如我所怀疑的那样,如果要在模块外部使用标记,也必须导出它们。(我只是不知道怎么做)

为此,在括号内的逗号分隔列表中添加标记

来自(一种按照我希望的方式“工作”的类型):

就我而言:

模块游戏公开(字母,猜测字母(猜测,未使用))

在导入端,您可以选择完全限定标记(使用模块,而不是类型):

也暴露标签

import Game exposing GuessedLetter(Guessed, Unguessed)
{- ... -}

guessToChar : GuessedLetter -> Char
guessToChar guess =
  case guess of
    Guessed l -> l
    Unguessed -> '_'

你能为你的问题提供每个文件的开头吗?模块导出(
module(),其中
)和每个模块中的导入(
import
)都将有助于对此进行调试。@Apanatshka我想我找到了它-请参阅下面的答案…
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 -> '_'