A generalized form of
liftA2, which in turn is a generalized
zipWith.
Takes a lifted binary function and uses it to combine two structures
of equal shape into a single structure.
It either takes two product structures to a product structure, or one
product and one sum structure to a sum structure.
Specification:
hliftA2 f xs ys = hpure (fn_2 f) ` hap ` xs ` hap ` ys
Instances:
hliftA2, liftA2_NP :: SListI xs => (forall a. f a -> f' a -> f'' a) -> NP f xs -> NP f' xs -> NP f'' xs
hliftA2, liftA2_NS :: SListI xs => (forall a. f a -> f' a -> f'' a) -> NP f xs -> NS f' xs -> NS f'' xs
hliftA2, liftA2_POP :: SListI2 xss => (forall a. f a -> f' a -> f'' a) -> POP f xss -> POP f' xss -> POP f'' xss
hliftA2, liftA2_SOP :: SListI2 xss => (forall a. f a -> f' a -> f'' a) -> POP f xss -> SOP f' xss -> SOP f'' xss