Mi pregunta es simple. Por qué la coincidencia de patrones incorrecta no arroja una excepción en Maybe monad. Para mayor claridad:Por qué la coincidencia de patrones no arroja una excepción en Maybe 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
Mira tryConstuctHTTPTask función. Creo que cuando el patrón no coincide (por ejemplo, "Object getP") debemos obtener algo como "Prelude.Exception", en su lugar obtengo el "Nothing". Me gusta este comportamiento, pero no entiendo por qué.
Gracias.
donde miro el código fuente original de esta Monad. – Anton
@ Antón: Puede encontrarlo en la fuente del módulo ['Data.Maybe'] (http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/src/ Data-Maybe.html), pero la definición es simplemente 'fail _ = Nothing'. – sepp2k
no encontré el proceso de coincidencia de patrones. Solo (Solo x) >> = k = k x – Anton