Можно ли закодировать в 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)
Но я не смог сделать правильные типы ...