[英]Why doesn't 6 / length [1, 2, 3] work in Haskell
有人可以向我解釋為什么6 / 3
有效但6 / length [1, 2, 3]
出錯了嗎?
這是 REPL 中的錯誤
<interactive>:20:1: error:
• No instance for (Fractional Int) arising from a use of ‘/’
• In the expression: 6 / length [1, 2, 3]
In an equation for ‘it’: it = 6 / length [1, 2, 3]
(/)
的類型為Fractional a => a -> a -> a
,因此它的每個 arguments 都必須是具有Fractional
實例的某種類型的值。
6
和3
都是多態文字,類型為Num a => a
。 因此, 6/3
具有類型Fractional a => a
,因為Fractional
是Num
的子類。
然而, length
總是返回一個Int
,而Int
沒有Fractional
實例。 最簡單的解決方法是使用genericLength:: Num i => [a] -> i
from Data.List
代替,它可以返回適合(/)
的第二個參數的Fractional a => a
類型的值:
>>> import Data.List
>>> 6 / genericLength [1,2,3]
2.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.