Meine Frage ist einfach. Warum falsche Mustererkennung keine Ausnahme in Maybe Monad wirft. Aus Gründen der Klarheit:Warum Mustererkennung keine Ausnahme auslöst. Vielleicht monad
data Task = HTTPTask {
getParams :: [B.ByteString],
postParams :: [B.ByteString],
rawPostData :: B.ByteString
} deriving (Show)
tryConstuctHTTPTask :: B.ByteString -> Maybe Task
tryConstuctHTTPTask str = do
case decode str of
Left _ -> fail ""
Right (Object trie) -> do
Object getP <- DT.lookup (pack "getParams") trie
Object postP <- DT.lookup (pack "postParams") trie
String rawData <- DT.lookup (pack "rawPostData") trie
return $ HTTPTask [] [] rawData
Blick auf tryConstuctHTTPTask Funktion. Ich denke, dass, wenn das Muster nicht übereinstimmt (zum Beispiel "Object getP") müssen wir etwas wie "Prelude.Exception", stattdessen bekomme ich die "Nothing". Ich mag dieses Verhalten, aber ich verstehe nicht warum.
Danke.
wo schaue ich auf ursprünglichen Quellcode dieser Monade. – Anton
@Anton: Sie finden es in der Quelle für das ['Data.Maybe'-Modul] (http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/src/ Data-Maybe.html), aber die Definition ist einfach "fail _ = Nothing". – sepp2k
Ich habe dort keinen Musterabgleichprozess gefunden. Nur (Just x) >> = k = k x – Anton