簡體   English   中英

為什么 6 / length [1, 2, 3] 在 Haskell 中不起作用

[英]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實例的某種類型的值。

63都是多態文字,類型為Num a => a 因此, 6/3具有類型Fractional a => a ,因為FractionalNum的子類。

然而, 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.

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