Ответ 1
Существует несколько способов сделать это, но все они несколько неудобны.
((+3).) . (*)
≡ fmap (+3) . (*)
≡ curry $ (+3) . uncurry (*)
≡ \l r -> l*r + 3
Ой, подождите, это была подпись, где также было компактное определение, угадайте, что он назвал...
((.).(.)) (+3) (*)
Я бы сказал, что решение лямбда, будучи наиболее явным, выглядит лучше всего.
Что помогает и часто делается локально как один (или два) -линера, заключается в том, чтобы определить эту композицию как пользовательский инфикс:
(.:) :: (c->d) -> (a->b->c) -> a->b->d
f .: i = \l r -> f $ i l r
Это позволяет просто написать (+3) .: (*)
.
BTW, для аналогичного (b->b->c) -> (a->b) -> a->a->c
(precompose правильная функция для обоих аргументов инфикса) существует широко используемая стандартная реализация.