如何获得有序格式haskell的函数结果

时间:2017-12-20 22:52:53

标签: haskell functional-programming

我有两个功能第一个列表

列表可以是:

['Sunyy','day',etc','etc']

countOccurrences :: [String] -> [(String, Int)]
countOccurrences xs = map (\xs -> (head xs, length xs)) . group . sort $ xs

此函数返回类似[("sunny",1),("etc",2)]

的内容

但是我想用我从第一个函数得到的值来调用sortOccurence函数,这样我就可以获得如下值:[("etc",2),("sunny",2)]

sortOccurrences :: [(String, Int)] -> [(String, Int)]
sortOccurrences sort = sortBy (comparing snd) sort

当我执行此函数时,我收到如下错误:

main.hs:13:32: error:
    Variable not in scope:
      comparing
        :: ((a0, b0) -> b0) -> (String, Int) -> (String, Int) -> Ordering

1 个答案:

答案 0 :(得分:1)

正如@ReinHenrichs所指出的,这只是一个不从comparing导入Data.Ord的情况。您可以通过在文件顶部添加此行来解决此问题:

import Data.Ord (comparing)

通常,当编译器说Variable not in scope (...)时,这意味着你编写了编译器不知道的东西,并且在某种程度上你必须让它知道你所指的是什么。由于comparing来自模块Data.Ord,因此默认情况下不会导入。