Haskell kitabu yaklaşık MonadPlus okurken, temelde başka türlü bir Char
ve String
alır ve alabalık dize kafa eşitse Just (char,tail)
döndürür veya Nothing
aşağıdaki işlevi bulundu:Haskell - Garip davranışları engellemek yapmak
char :: Char -> String -> Maybe (Char, String)
char c s = do
let (c':s') = s
if c == c' then Just (c, s') else Nothing
ve onlar desen başarısız, ama ne zaman Nothing
için değerlendirirsiniz bir do
blokta ise neden let (c':s') = s
, bir istisna oluşturmaz edeceğini açıklamak, yani durum böyle değil ben denedim çünkü:
*Main> char 'a' ""
*** Exception: exercice2.hs:5:7-17: Irrefutable pattern failed for pattern (c' : s')
Yani bunu yeniden yazmak zorunda:
char' :: Char -> String -> Maybe (Char, String)
char' _ [] = Nothing
char' c (c':s')
| c == c' = Just (c,s')
| otherwise = Nothing
ve beklendiği gibi ... Neden oluyor bana çalıştı?
konu Kapalı: [1] nitpicking: Haskell Wiki/= Haskell Vikikitap (ortak bir karışıklık olduğu). [2] Kitapta gerçekten bir hata varsa MonadPlus bölümü kısa bir süre içinde AMP için güncelleneceğinden, bunu bildirmek için çok uygun bir an vardı. Teşekkürler! – duplode
@duplode Tamam, ben sizinki gibi Haskell Wikibook'a değiştireceğim – FtheBuilder
@duplode Cehaletimden dolayı üzgünüm, ama AMP ne anlama geliyor? – FtheBuilder