簡體   English   中英

為什么Haskell中的Fractional類型類本身不可訂購?

[英]Why isn't the Fractional typeclass inherently orderable in Haskell?

假設我有以下代碼:

import Data.List
f :: (Fractional a) => [a] -> Int -> a
f xs n = sort xs !! n

這將無法編譯,因為sort類型為Ord a => [a] -> [a] 這對我來說似乎很奇怪,因為我認為所有Num型值都是固有可訂購的。 要解決這個問題,我需要添加一個額外的類型約束(即(Fractional a, Ord a) => [a] -> Int -> a )。 看看Haskell的文檔,從語法/層次角度來看 ,這是有意義的。

是什么給出了什么? 為什么真正的價值是可訂購的,而不是分數值? 我不明白其理由。

Fractional不是一種類型,而是支持實際划分的類型的類型類。 那么你的問題就變成了Fractional沒有Ord作為超類的原因。 至於那個, Complex是支持分裂的類型的一個很好的反例,但是沒有合理的總排序,如Willem Van Onsem所建議的代數Fractional類型。

暫無
暫無

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

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