在你的代碼, 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
,通配符_是表達「其他」的更好方法。