Существует несколько способов сделать это, но все они несколько неудобны.
((+3).) . (*)
≡ fmap (+3) . (*)
≡ curry $ (+3) . uncurry (*)
≡ \l r -> l*r + 3
Ой, подождите, это была подпись, где есть также компактное определение, думают, что это называется ...
((.).(.)) (+3) (*)
Я бы утверждать, что решение лямбды, будучи наиболее явными, является а лучше всего здесь.
Что помогает, и это часто делается только на местном уровне, как один (или два) -liner, чтобы определить эту композицию в качестве пользовательского инфиксом:
(.:) :: (c->d) -> (a->b->c) -> a->b->d
f .: i = \l r -> f $ i l r
Что позволяет писать просто (+3) .: (*)
.
Кстати, за аналогичный (b->b->c) -> (a->b) -> a->a->c
(Precompose правильной функции как аргументов инфикса) существует a widely-used standard implementation.
http://conal.net/blog/posts/semantic-editor-combinators – luqui
[This] (http://stackoverflow.com/questions/9656797/variadic-compose-function) может быть то, что вы ищете , – is7s