在你的代码, parseArgs [x, y]
意味着它仅接受正好有两个元素的列表。 所以length [x, y]
将永远是2,那些(> 2)(< 2)条件永远不会被满足。
otherwise
将始终是两个元素的列表。所以当输入是两个元素的列表时,你可以得到x和y,并且确定它们是一个Maybe元组。
但除此之外,如果您parseArgs []
parseArgs ["a"]
parseArgs ["a","b","c"]
,您会收到一个异常“函数parseArgs中的非穷举模式”。 这是因为代码没有涵盖所有的模式[String]
我使用Maybe(字符串,字符串)输出在这里。这意味着parseArg将产生Just(String,String)或Nothing。也许它更接近你想要的。
那么试试这个:
parseArgs :: [String] -> Maybe (String, String)
parseArgs x:y:[] = Just (x,y)
parseArgs xs = Nothing
这意味着如果输入[字符串]恰好是X:Y:[](一个确切的两个字符串列表),仅产生(X,Y)。除此之外,不产生任何东西。通过这种方式,它覆盖了[String]中的所有模式。如果不是两个元素的列表,则可以获得Nothing
。
编辑: 第二个到@ pdoherty926的parseArgs _ = Nothing
,通配符_是表达“其他”的更好方法。