Ci sono diversi modi per farlo, ma sono tutti un po 'imbarazzante.
((+3).) . (*)
≡ fmap (+3) . (*)
≡ curry $ (+3) . uncurry (*)
≡ \l r -> l*r + 3
Oh, aspetta, questa è stata la firma, dove c'è anche una definizione compatta, indovinate come si chiama ...
((.).(.)) (+3) (*)
Direi che la soluzione lambda, essendo più esplicita, è piuttosto il migliore qui.
cosa aiuta, ed è spesso fatto solo a livello locale come -liner uno (o due), è quello di definire questa composizione come un infisso personalizzato:
(.:) :: (c->d) -> (a->b->c) -> a->b->d
f .: i = \l r -> f $ i l r
che permette di scrivere semplicemente (+3) .: (*)
.
proposito, per la simile (b->b->c) -> (a->b) -> a->a->c
(precomponete la funzione diritto di entrambi argomenti della infisso) esiste a widely-used standard implementation.
http://conal.net/blog/posts/semantic-editor-combinators – luqui
[This] (http://stackoverflow.com/questions/9656797/variadic-compose-function) potrebbe essere quello che stai cercando . – is7s