2015-02-16 17 views
6

L'operatore (.) ha la firma:Haskell per funzione con più operandi

(.) :: (b -> c) -> (a -> b) -> a -> c 
(.) f g x = f $ g x 

Questo sembra un po 'simile alla composition function in funzione ricorsiva primitiva con uno g.

non sono interessati ad estendere il numero di g -Funzioni, ma (diverse) funzioni relative alla funzione (.) su una funzione g con più operandi. In altre parole, qualcosa di simile a:

(..) :: (c -> d) -> (a -> b -> c) -> a -> b -> d 
(..) f g x y = f $ g x y 

Una ricerca su Hoogle non risulta in alcuna funzione. Esiste un pacchetto in grado di gestirlo con un numero arbitrario di operandi?

+4

Stai cercando la libreria [composition] (http://hackage.haskell.org/package/composition-1.0.1.0/docs/Data-Composition.html). – bheklilr

+0

@bheklilr: sì, è tutto. Perché questo non compare in * Hoogle *? –

+4

Hoogle non esegue la ricerca di tutti gli hackage, ma puoi utilizzare [+ composizione] (https://www.haskell.org/hoogle/?hoogle=%28c+-%3E+d%29+-%3E+%28a+- % 3E + b + -% 3E + c% 29 + -% 3E + a + -% 3E + b + -% 3E + d +% 2Bcomposition) per cercare un pacchetto particolare, ma ciò non aiuta a trovare il pacchetto da cercare. Puoi utilizzare [fpcomplete's] (https://www.fpcomplete.com/hoogle?q=%28c+-%3E+d%29+-%3E+%28a+-%3E+b+-%3E+c%29+- % 3E + a + -% 3E + b + -% 3E + d & env = ghc-7.8-stable-14.09) versione di hoogle che cerca più pacchetti per impostazione predefinita. – bheklilr

risposta

6

Per rispondere a-Ify miei commenti:

Multi-argomenti operatori di composizione funzione sono molto facili da definire, e per fortuna qualcuno ha fatto questo per voi già. Il pacchetto composition ha un bel set di operatori da utilizzare per comporre le funzioni in questo modo. Trovo anche che, invece di usare il motore di hokell.org di hoogle, la versione fpcomplete's cerca attraverso più pacchetti rendendo più facile trovare quello che sto cercando.

2

Jasper Van der Jeugt ha un operatore generico che fa esattamente questo. Cf. this blog post.