13
Próbuję napisać funkcję składu funkcji variadic. Który jest w zasadzie (.)
, z tym że druga funkcja argumentu jest wariantowa. Powinno to umożliwić wyrażenia jak:Funkcja komponowania Variadic?
map even . zipWith (+)
lub po prostu
map even . zipWith
Obecnie co już osiągnęły prace jeśli dodam IncoherentInstances
i wymaga non-polimorficzny instancję dla funkcji pierwszy argument.
{-# 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
Wszelkie pomysły? Czy to możliwe?
można wyjaśnić nieco więcej, co masz na myśli przez „o zmiennej liczbie argumentów złożenie funkcji "? może dodać kilka przykładów. –
Wyjaśniłem trochę w ostatniej edycji. Poza tym, co jest nie tak z tymi dwoma podanymi przykładami? – is7s
Och, przepraszam. Przykłady są w porządku. Nie było dla mnie oczywiste, że nie sprawdzają poprawności. –