2010-05-25 18 views
9

Tôi nhận được một cảnh báo từ GHC khi tôi biên dịch:Trong Haskell, nó có nghĩa là gì nếu một liên kết "đổ bóng một ràng buộc hiện có"?

Cảnh báo: Đây ràng buộc đối với bóng tối 'vỗ' một hiện ràng buộc trong định nghĩa của 'match_ignore_ancs'

Dưới đây là các chức năng:

match_ignore_ancs (TextPat _ c) (Text t) = c t 
match_ignore_ancs (TextPat _ _) (Element _ _ _) = False 
match_ignore_ancs (ElemPat _ _ _) (Text t) = False 
match_ignore_ancs (ElemPat _ c pats) (Element t avs xs) = 
    c t avs && match_pats pats xs 

Bất kỳ ý tưởng nào về ý nghĩa này và cách tôi có thể khắc phục sự cố?

Chúc mừng.

+0

Điều gì sẽ xảy ra nếu bạn đổi tên cả hai 'pats' trong' match_ignore_ancs' thành cái gì khác, e. g. 'pats1'? –

Trả lời

9

Nó có nghĩa là bạn có một biểu tượng pats định nghĩa ở một nơi khác trong chương trình của bạn hoặc nhập khẩu từ một số mô-đun thư viện, và nó hiển thị trong phạm vi tương tự như match_ignore_ancs, vì vậy khi bạn đặt tên cho một tham số pats, nó ẩn (tức là "bóng tối") biểu tượng hiện tại đó.

Chỉ cần đổi tên thông số pats thành thông tin không có xung đột.

Các vấn đề liên quan