Можно ли закодировать в Haskell общую функцию «лифта»?

Я не самый большой поклонник varargs, но я всегда думал, что оба аппликативных (f <$> x <*> yидиома ([i| f x y |]) стили имеют слишком много символов. Я обычно предпочитаю идтиliftA2 f x y Кстати, но я тоже считаю, что A2 немного некрасиво. Отэтот вопросЯ узнал, что в Haskell можно реализовать функции vararg. Таким образом, возможно ли использовать тот же принцип для реализации функции подъема, такой что:

lift f a b == pure f <*> a <*> b

Я пытался заменить+ от<*> по указанному коду:

class Lift r where 
    lift :: a -> r

instance Lift a where
    lift = id

instance (Lift r) => Lift (a -> r) where
    lift x y = lift (x <*> y)

Но я не смог сделать правильные типы ...

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

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