问题
I am trying to create a function which takes a list of tuples as argument and sort the by the second element. It doesn't print anytning else, just the error '*** Exception: main.hs:20:1-76: Non-exhaustive patterns in function sortWords' Here is the code:
sortWords :: [(String, Int)] -> [(String, Int)]
sortWords [(str,num)] = sortBy (\x y -> compare (snd x) (snd y)) [(str,num)]`
And here is how I call the function
main = do
putStrLn $ show $ sortWords [("friend",1),("she",2)]
I have to say that I run my program on http://Repl.it website
Thanks!
回答1:
sortWords [(str,num)] =
Your function definition (above) pattern matches for a list containing a single element which is a tuple with variables for each of the two values.
You seem to want just a variable and not a pattern match at all:
sortWords xs = sortBy (\x y -> compare (snd x) (snd y)) xs
or eta reduced:
sortWords = sortBy (\x y -> compare (snd x) (snd y))
来源:https://stackoverflow.com/questions/54138148/how-to-fix-non-exhaustive-patterns-in-function-error-in-haskell