Variadic составить функцию?
Я пытаюсь написать композиционную функцию переменной функции. Который в основном(.)
за исключением того, что функция второго аргумента является переменной. Это должно позволять выражения как:
map even . zipWith (+)
или просто
map even . zipWith
В настоящее время то, что я достиг, работает, если я добавлюIncoherentInstances
и требует неполиморфного экземпляра для функции первого аргумента.
{-# 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
Есть идеи? Это вообще возможно?