Числовые литералы имеют полиморфный тип:Почему полиморфные значения не выводятся в Haskell?
*Main> :t 3
3 :: (Num t) => t
Но если связать переменную с таким буквальным, полиморфизм теряется:
x = 3
...
*Main> :t x
x :: Integer
Если я определить функцию, с другой стороны, это, конечно, полиморфный:
f x = 3
...
*Main> :t f
f :: (Num t1) => t -> t1
Я мог бы обеспечить сигнатуру типа для обеспечения x
остается полиморфным:
x :: Num a => a
x = 3
...
*Main> :t x
x :: (Num a) => a
Но зачем это необходимо? Почему не выведен полиморфный тип?
Не имеет значения? (Я действительно не знаю, хотя подозреваю, что нет) – delnan
Это действительно имеет значение; Я хочу, чтобы тип оставался как можно более общим. –
Приходите еще? Независимо от того, является ли 'x'' Integer' или 'Num a => a', вы можете передать его любой функции, которая ожидает' Num'. Функции должны быть общими, значения нет. – delnan