2012-01-24 35 views
5

Aşağıdaki kod var:Çakışan desen maçları

Warning: Pattern match(es) are overlapped 
     In an equation for `test': test "g" = ... 

Bu bir hata mı yoksa bir şey eksik: Ben GHCi içine (7.0.3) bunu yüklediğinizde

test :: String -> Bool 
test "g" = True 
test "global" = True 
test _ = False 

, ben olsun İşte?

aşağıdaki tutun:

test "" == False 
test "g" == True 
test "gl" == False 
test "global" == True 
test "globalx" == False 

GÜNCELLEME: Ben {-# LANGUAGE OverloadedStrings #-} kullanıyorum

.

cevap

9

Bu, OverloadedStrings uzantısının kullanımından kaynaklanan GHC bug #5117'dir. GHC 7.2'de düzeltilmelidir. Geçici çözüm olarak, {-# LANGUAGE NoOverloadedStrings #-} numaralı modül için OverloadedStrings kapatabilir veya uyarıyı {-# OPTIONS_GHC -fno-warn-overlapping-patterns #-} ile kapatabilirsiniz. Ya da görmezden gelin :)

3

OverloadedStrings'u açtın mı? Doğru olarak hatırlarsam, bu 'sahte' çakışan kalıp uyarılarına neden olur, çünkü bu durumda, örn. "g" ve "global" karşılıklı olarak münhasırdır.