Я не самый большой поклонник 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)
Но мне не удалось получить правильные типы...