代码写得太BT,恶心死了
例:
convert :: String -> String
convert s = let (Right str) = do { n <- parseHex s; toString n } `catchError` printError
in str
where printError e = return $ "At index " ++ (show (location e)) ++ ":" ++ (reason e)
修改版:
convert :: String -> String
convert s = case (parseHex s >>= toString) of
Left e -> "At index " ++ (show (location e)) ++ ":" ++ (reason e)
Right str -> str
(见Error Monad, example12)
还有那个Count Monad,开始几遍硬是没有看懂,后来看看wikibook上面的解析才明白啥意思,有必要这么复杂吗,用if, case, guard 等都可以简单的处理。。没明白这里到底有什么优势。CPS可以控制流程,但是如果代码处理的好,也不会出现这种极端情况,有如goto之于命令式语言。
Monad Transformers 一开始又是那个恶心的代码。。
全文没有一张图,难道没有听过一句话,“一图胜千言”!!!
看得恶心,恶心,恶心
看得不懂,不懂,不懂
本文探讨了使用Monads处理复杂代码的方式,并对比了不同处理方法的优势与不足,提出了一些改进意见。
2083

被折叠的 条评论
为什么被折叠?



