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

Есть идеи? Это вообще возможно?

Ответы на вопрос(1)

Ваш ответ на вопрос