Модуль Data.NumInstances
того же пакета определяет a Num
экземпляр для функций, которые возвращают числа:
instance Num b => Num (a->b) where
(+) = liftA2 (+)
(*) = liftA2 (*)
fromInteger = pure . fromInteger
...
В Haskell целочисленный литерал, такой как 2
, является общим, так что он может представлять число для любого экземпляра Num
:
Prelude> :t 2
2 :: (Num t) => t
Чтобы преобразовать его в фактическое число типа, требуемого в определенном контексте, вызывается fromInteger
из класса Num
.
Поскольку упомянутый выше вспомогательный модуль определяет экземпляр Num
для функций, 2
теперь можно преобразовать в функцию с помощью указанного здесь метода fromInteger
.
Таким образом, ghci вызывает fromInteger 2
, чтобы получить функцию, необходимую как второй параметр конструкции в вопросе. Тогда целое выражение оценивается как 6
.