How to fix 'Non-exhaustive patterns in function' error in haskell?

允我心安 提交于 2019-12-20 06:29:19

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!