Sto provando a scrivere una funzione di composizione della funzione variadica. Che è fondamentalmente lo (.)
tranne per il fatto che la funzione del secondo argomento è variadic. Ciò dovrebbe consentire espressioni come:Funzione di composizione variabile?
map even . zipWith (+)
o semplicemente
map even . zipWith
Attualmente quello che ho raggiunto lavori se aggiungo IncoherentInstances
e richiede un'istanza non polimorfica per la prima funzione argomento.
{-# LANGUAGE FlexibleInstances, OverlappingInstances, MultiParamTypeClasses,
FunctionalDependencies, UndecidableInstances, KindSignatures #-}
class Comp a b c d | c -> d where
comp :: (a -> b) -> c -> d
instance Comp a b (a :: *) (b :: *) where
comp f g = f g
instance Comp c d b e => Comp c d (a -> b) (a -> e) where
comp f g = comp f . g
Qualche idea? È possibile?
si può spiegare un po' di più che cosa si intende per "composizione Funzione Variadica "? magari aggiungi qualche esempio –
Ho chiarito un po 'nell'ultima modifica. Oltre a ciò, cosa c'è di sbagliato con i due esempi forniti? – is7s
Oh, mi dispiace. Gli esempi vanno bene. Non era ovvio per me che non tipografano. –