ブロック行い、私は基本的にChar
とString
を取り、そのような文字が他の文字列の先頭、又はNothing
等しい場合Just (char,tail)
を返し、次の機能が見つかりました:ハスケル - 奇妙は<strong>ハスケルWikibook</strong>約<a href="https://en.wikibooks.org/wiki/Haskell/MonadPlus" rel="nofollow">MonadPlus</a>を読んでいる間行動
char :: Char -> String -> Maybe (Char, String)
char c s = do
let (c':s') = s
if c == c' then Just (c, s') else Nothing
と、彼らはそれがパターンが失敗したときNothing
に評価されますdo
ブロック内にある原因let (c':s') = s
は、例外を生成しませんが、私はそれをしようとしたときので、それは、そうではないことを説明:
*Main> char 'a' ""
*** Exception: exercice2.hs:5:7-17: Irrefutable pattern failed for pattern (c' : s')
は、だから私はそれを書き換える必要があった:
char' :: Char -> String -> Maybe (Char, String)
char' _ [] = Nothing
char' c (c':s')
| c == c' = Just (c,s')
| otherwise = Nothing
、それは予想通り...なぜそれが私に起こっている働いていましたか?
トピックオフ:[1]つべこべ:ハスケルウィキ/ =ハスケルWikibook(それは共通の取り違えです)。 [2]本にバグがあった場合は、MonadPlusの章がAMPのために短期間に更新されるので、それを報告するのは非常に適切な瞬間でした。ありがとう! – duplode
@duplodeあなたが言ったように、私はHaskell Wikibookにそれを変更しようとしています – FtheBuilder
@duplode私の無知には申し訳ありませんが、AMPはどういう意味ですか? – FtheBuilder