Вывод определенного типа с использованием функции uncurry

Я играл с функцией uncurry в GHCi и обнаружил то, чего я совсем не мог понять. Когда я применяю uncurry к функции (+) и привязываю это к некоторой переменной, как в приведенном ниже коде, компилятор определяет ее тип как специфичный для Integer :

Prelude> let add = uncurry (+)
Prelude> :t add
add :: (Integer, Integer) -> Integer

Однако, когда я спрашиваю тип следующего выражения, я получаю (как я ожидал) правильный результат:

Prelude> :t uncurry (+)
uncurry (+) :: (Num a) => (a, a) -> a

Что могло бы вызвать это? Это специфично для GHCi?

То же самое применимо к let add '= (+) .

ПРИМЕЧАНИЕ: Я не смог воспроизвести это, используя скомпилированный файл .

6
задан Josh Lee 15 February 2011 в 04:32
поделиться