是否有任何理由将length
功能限制为Int
而不是Num
?
prelude中的很多函数都限制为Int
类型而不是更通用的类型/类型类:
:t length
length :: [a] -> Int
:t take
take :: Int -> [a] -> [a]
:t drop
drop :: Int -> [a] -> [a]
但Data.List
中还有更多通用函数:t genericLength
genericLength :: Num i => [a] -> i
:t genericTake
genericTake :: Integral i => i -> [a] -> [a]
:t genericDrop
genericDrop :: Integral i => i -> [a] -> [a]
为什么第一个具有Int
限制并且没有被定义为通用的第二个?
这Int
限制是否有任何理由?