Я пытаюсь понять результат
(*) . (+)
в Haskell. Я знаю, что оператор композиции - это просто стандартный состав математических функций, поэтому
(f . g) = f (g x)
Но:
(*) . (+) :: (Num (a -> a), Num a) => a -> (a -> a) -> a -> a
Я пытаюсь понять подпись этого типа. Я ожидал, что смогу сделать что-то вроде:
((*) . (+)) 1 2 :: Num a => a -> a
= (* (+ 1 2))
В чем смысл (*). (+) подпись типа? Я попытался сыграть с ним чем-то вроде (просто совпадающим с его сигнатурой):
((*) . (+)) 1 (\x -> x + 1) 1
Но это не скомпилируется. Я пытаюсь пройти логические шаги при их составлении, но я не совсем понимаю, как это получается с этим результатом (и каков результат).