我收到以下錯誤消息,當我編譯:重載函數簽名哈斯克爾
有重複的類型簽名:
weightedMedian.hs:71:0-39:findVal :: [ValPair] - >雙擊 - >雙
weightedMedian.hs:68:0-36:findVal :: [ValPair] - >詮釋 - >雙
我的解決辦法是讓findValI和findValD。但是,findValI只是將Int類型轉換爲Double並調用findValD。
我也可以在各類民(智力,雙人間)不模式匹配,所以我不能只是改變類型簽名
findVal :: [ValPair] -> Num -> Double
在許多語言中,我不會需要不同的名字。爲什麼在Haskell中需要不同的名稱?這難以添加到語言中嗎?或者那裏有龍嗎?
嘗試刪除函數簽名,將其加載到GHCI中並鍵入':t findVal'來查看自動計算的函數簽名。它可能不是Int或Double,而是看起來像'Num a => [ValPair] - > a - > Double',這正是您需要的。 – 2011-05-25 03:53:00
@Anupam Jain:其實它的「真實」版本是[ValPair] - > Double - > Double。我可以使用Augustss的技術來解決這個問題,然後我最終得到你列出的簽名。 – 2011-05-25 19:12:01