Почему сопоставление с образцом не вызывает исключения в монаде Maybe

Мой вопрос простой. Почему неправильное сопоставление с образцом не вызывает исключение в монаде Maybe. Для ясности:

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

Посмотрите на функцию tryConstuctHTTPTask . Я думаю, что когда шаблон не совпадает (например, « Object getP »), мы должны получить что-то вроде «

clean:
    del $(DESTDIR_TARGET)

Но в Linux:

clean:
    rm $(DESTDIR_TARGET)

Также я хотел бы использовать другой разделитель каталогов в Windows ( \ ) и Linux ( / ).


Возможно обнаружение Операционная система Windows в Makefile?

PS: Я не хочу эмулировать Linux в Windows (cygwin и т. Д.)

Есть похожий вопрос: ОС обнаруживает make-файл , но я этого не сделал » Я не найду здесь ответ.

42
задан Community 23 May 2017 в 11:55
поделиться