使用标记的联合类型时“无法找到模式”

时间:2015-07-23 01:48:46

标签: elm

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 )解决了这个问题。

如何修复此功能?

1 个答案:

答案 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 -> '_'