簡體   English   中英

添加實例聲明haskell

[英]add an instance declaration 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

因此,我希望有人可以向我解釋該錯誤的含義以及為解決該問題而必須更改的內容。

編輯通過將最大值更改為最大值,我得到了這個新錯誤:

    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

這是什么意思?

假定使用String調用bestLocByArtiestrev的類型需要為[Review] -> Double 但是實際上是[[Review] -> Double] -> [[Review] -> Double] 這基本上就是錯誤消息所說的。

因此,要解決此問題,您需要更改bestLocByArtiest的類型簽名,或者需要修改rev功能。 這涉及查看maxgmloc的類型以及gmloc的各個元素,以確保它gmloc您的要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM