着名的"了解更多好的Haskell"本书包含命令行参数解析的示例:
dispatch :: String -> [String] -> IO ()
dispatch "add" = add
dispatch "view" = view
dispatch "remove" = remove
main = do
(command:argList) <- getArgs
dispatch command argList
在模式匹配很简单之前,测试它没有意义,但事情很快变得更加复杂:
main :: IO()
main = getArgs >>= dispatch
dispatch :: [String] -> IO()
dispatch ("add":args) = add args >> list
dispatch ("remove":args) = remove args >> list
dispatch ("view":[]) = list
dispatch [] = list
dispatch _ = usage
现在想法似乎测试每个特定输入样本是否触发正确的模式匹配分支。如果派遣有任何回报,那没问题,但不幸的是。 我的想法是:
我希望有一个暗示,哪些假设是正确的,哪些假设是正确的。
提前致谢!
答案 0 :(得分:0)
如果您继续阅读,LYAH会提供一些有助于提高此计划稳健性的建议 - 特别是使用Maybe
monad和lookup
。
关于您的编号清单:
Action ()
,但add
,view
等也必须返回Action ()
。dispatch
语言扩展程序可以提高此PatternSynonyms
的可读性,该扩展程序自2014年1月20日起在GHC中提供:https://github.com/ghc/ghc/commit/4f8369bf47d27b11415db251e816ef1a2e1eb3d8 add
,view
等的返回类型instance Arbitrary Input
,但测试{em>所有可能的getLine
输入可能需要一段时间...... :-P 强> 我希望这有帮助