Если установлено ограничение мономорфизма (по умолчанию оно отключено в более новом GCHi, но включено в скомпилированном коде), то xs
по умолчанию будет [Int]
, а не более общим типом Num a => [a]
, который будет работать (/)
оператор.
(По крайней мере, в GHCi 8.4.1 по умолчанию используется значение Integer
вместо Int
.)
% ghci
GHCi, version 8.4.1: http://www.haskell.org/ghc/ :? for help
Prelude> let xs = [1,2]
Prelude> :t xs
xs :: Num a => [a]
Prelude> :set -XMonomorphismRestriction
Prelude> let ys = [1,2]
Prelude> :t ys
ys :: [Integer]
Всегда предоставляйте явные подписи типов, чтобы быть уверенными:
% ghci -XMonomorphismRestriction
GHCi, version 8.4.1: http://www.haskell.org/ghc/ :? for help
Prelude> let xs = [23,32,1,3] :: Num a => [a]
Prelude> :t xs
xs :: Num a => [a]
Prelude> map (/12) xs
[1.9166666666666667,2.6666666666666665,8.333333333333333e-2,0.25]