添加实例声明haskell

时间:2013-12-18 16:54:54

标签: list haskell

这是我的功能:

    bestLocByArtiest :: String -> [Review] -> Double
    bestLocByArtiest art = rev
        where gmloc = [gemZaalByArtiest art, gemFestByArtiest art, gemOpenByArtiest art]
              rev = max gmloc 

这是我得到的错误:

    Review.hs:101:24:
Couldn't match type `[Review] -> Double' with `Review'
Expected type: [Review] -> Double
  Actual type: [[Review] -> Double] -> [[Review] -> Double]
In the expression: rev
In an equation for `bestLocByArtiest':
    bestLocByArtiest art
      = rev
      where
          gmloc = [gemZaalByArtiest art, ....]
          rev = max gmloc

所以我希望有人能解释一下这个错误意味着什么以及我必须在我的代码中改变它来解决它。

修改 通过将max更改为最大值,我得到了这个新错误:

    Review.hs:103:21:
No instance for (Ord ([Review] -> Double))
  arising from a use of `maximum'
Possible fix:
  add an instance declaration for (Ord ([Review] -> Double))
In the expression: maximum gmloc
In an equation for `rev': rev = maximum gmloc
In an equation for `bestLocByArtiest':
    bestLocByArtiest art
      = rev
      where
          gmloc = [gemZaalByArtiest art, ....]
          rev = maximum gmloc

这是什么意思?

1 个答案:

答案 0 :(得分:1)

鉴于使用bestLocByArtiest调用Stringrev的类型必须为[Review] -> Double。但实际上它是[[Review] -> Double] -> [[Review] -> Double]。这基本上就是错误信息所说的内容。

因此,要修复此问题,您需要更改bestLocByArtiest的类型签名,或者需要修改rev的内容。这需要查看maxgmloc的类型以及gmloc中的各个元素,以确保它能够满足您的需求。