2015-07-23 21 views
5

Tôi have an app kéo dài nhiều mô-đun. Đầu tiên, tôi mô hình hóa vấn đề của mình, tạo ra một số kiểu dữ liệu. Trong lần thứ hai, tôi đang đặt quan điểm."Không thể tìm thấy mẫu" khi sử dụng loại công đoàn được gắn thẻ

Một trong những loại là một loại công đoàn gắn thẻ:

type alias Letter = Char 
type GuessedLetter = Guessed Letter | Unguessed 

Trong Xem mô-đun của tôi, tôi có một chức năng để hiển thị một bức thư:

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

Nhưng khi tôi cố gắng biên soạn những tập tin này, Tôi nhận được lỗi sau:

## 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. 

Tôi nghĩ "Có lẽ tôi nên xuất các thẻ cũng như loại?", nhưng không thêm thêm các thẻ vào mô-đun xuất, xuất cũng không phải cố gắng đủ điều kiện để các thẻ (GuessedLetter.Guessed) đã giải quyết được vấn đề.

Làm cách nào để khắc phục chức năng này?

+1

bạn có thể cung cấp sự khởi đầu của mỗi file cho câu hỏi của bạn? Cả hai mô đun xuất khẩu ('module () trong đó') và nhập khẩu trong mỗi mô-đun ('import ') sẽ hữu ích để gỡ lỗi này. – Apanatshka

+0

@Apanatshka Tôi nghĩ tôi đã tìm thấy nó - xem câu trả lời bên dưới… – andrewdotnich

Trả lời

12

Như tôi đã nghi ngờ, nếu bạn muốn sử dụng các thẻ bên ngoài mô-đun, bạn phải xuất các thẻ đó quá. (Tôi chỉ không chắc chắn như thế nào).

Để làm điều đó, hãy thêm các thẻ vào danh sách được phân tách bằng dấu phẩy bên trong dấu ngoặc đơn.

Từ the source code for Maybe (một loại mà 'làm việc' theo cách tôi muốn tôi đến):

module Maybe exposing 
    (Maybe(Just,Nothing) 
    , andThen 
    , map, map2, map3, map4, map5 
    , withDefault 
    , oneOf 
) 

Hoặc trong trường hợp của tôi:

module Game exposing (Letter, GuessedLetter(Guessed, Unguessed))

Về phía nhập khẩu, bạn có thể sau đó chọn đủ điều kiện các thẻ (với mô-đun , không phải là loại):

import Game exposing GuessedLetter 
{- ... -} 

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

hoặc vạch trần các thẻ quá:

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

guessToChar : GuessedLetter -> Char 
guessToChar guess = 
    case guess of 
    Guessed l -> l 
    Unguessed -> '_' 
Các vấn đề liên quan