Haskell'无法将预期类型与实际类型匹配'

时间:2016-04-23 14:44:07

标签: haskell types ghci

我一直在阅读七周语言中的七种语言,我正在与Haskell合作。

我正在努力解决这个问题:

编写一个排序,它接受一个列表和一个比较其两个参数的函数,然后返回一个排序列表。

我在网上寻求帮助并找到了解决方案,但由于预期的实际类型错误,我甚至无法运行解决方案。

以下是我一直在尝试的代码:

module Main where
import Data.List
sortList :: (Ord a) => (a -> a -> Ordering) -> [a] -> [a]
sortList comparator list = sortBy comparator list

以下是错误:

*Main> sortList [5,4,2,7,8,1]

<interactive>:1:10:
    Couldn't match expected type `a -> a -> Ordering'
                with actual type `[t]'
    In the first argument of `sortList', namely `[5, 4, 2, 7, ....]'
    In the expression: sortList [5, 4, 2, 7, ....]
    In an equation for `it': it = sortList [5, 4, 2, ....]

我的想法和尝试:

也许我在调用函数错了?我是Haskell的新手。我也试过做很多搜索。我所能得出的结论是某些类型不匹配的地方。我想对脚本的解释和指导对我很有帮助。

2 个答案:

答案 0 :(得分:2)

您的功能签名说:

  

“sortList是一个函数:”

     
      
  • 函数(a - &gt; a - &gt; Ordering),它接受两个类型为'a'的元素并返回'Ordering'[这是你的比较器]
  •   
  • 您传递的项目'a'([a])列表
  •   
  • 返回项目列表'a'([a])
  •   

尝试以这种方式打电话:

sortList compare [3,2,1]

如需更多信息,请点击此处: https://hackage.haskell.org/package/base-4.8.2.0/docs/Data-Ord.html

在这里: http://zvon.org/other/haskell/Outputprelude/compare_f.html

答案 1 :(得分:1)

你正在调用该函数错误,你需要传递一个比较器函数。您只需将列表传递给函数。