Îõ³h$ ±     None9ÉÔÙ“ czipwithWhere  is a "lifted Apply", this is a "lifted  ".laws:  naturalityt .  f =  (t . f)) for every applicative transformation tidentity Identity = Identity composition (Compose .  g . f) = Compose .  ( g) .  fand cZipWithM f k l must behave like  Compose (f x y)) k l)czipwithlaws:  (\x _ -> x) g _ = g  (\_ y -> y) _ h = h8This class seems to be some kind of "lifted" version of  (or rather: of Apply?), but it also seems to share an important property with the  áhttps://hackage.haskell.org/package/distributive-0.5.2/docs/Data-Distributive.html#t:Distributive Distributive class from the  0https://hackage.haskell.org/package/distributive distributive package, even when  Distributive and Å methods don't appear all that similar. From the corresponding docs: ÊTo be distributable a container will need to have a way to consistently zip a potentially infinite number of copies of itself. This effectively means that the holes in all values of that type, must have the same cardinality, fixed sized vectors, infinite streams, functions, etc. and no extra information to try to merge together.®Especially "all values of that type must have the same cardinality" is true for instances of CZipWith, the only difference being that the "holes" are instantiations of the  f :: * -> *& to some type, where they are simply a :: * for  Distributive. For many  DistributiveÄ instances there are corresponding datatypes that are instances of Á (although they do not seem particularly useful..), for example: 9newtype CUnit a f = CUnit (f a) -- corresponding to IdentityŠ data CPair a b f = CPair (f a) (f b) -- corresponding to 'data MonoPair a = MonoPair a a' -- (Pair being a trivial fixed-size vector example) data CStream a f = CStream (f a) (CStream a f) -- corresponding to an infinite stream czipwith*zipWith on constructors instead of values.czipwithThe "lifted Functor" classczipwithThe "lifted Apply" class czipwithThe equivalent of  's / czipwith Derives a cPointed! instance for a datatype of kind  (* -> *) -> *. * here)!there is exactly one constructor;9all fields in the one constructor are either of the form f x for some x or of the form X f for some type X where there is an instance cPointed X.0For example, the following would be valid usage: µdata A f = A { a_str :: f String , a_bool :: f Bool } data B f = B { b_int :: f Int , b_float :: f Float , b_a :: A f } derivecPointed ''A derivecPointed ''B &This produces the following instances: èinstance cPointed A where cPoint f = A f f instance cPointed B where cPoint f = B f f (cPoint f f) czipwith Derives a ! instance for a datatype of kind  (* -> *) -> *. * here)!there is exactly one constructor;9all fields in the one constructor are either of the form f x for some x or of the form X f for some type X where there is an instance CZipWith X.0For example, the following would be valid usage: ¶data A f = A { a_str :: f String , a_bool :: f Bool } data B f = B { b_int :: f Int , b_float :: f Float , b_a :: A f } deriveCZipWith ''An deriveCZipWith ''B &This produces the following instances: Åinstance CZipWith A where cZipWith f (A x1 x2) (A y1 y2) = A (f x1 y1) (f x2 y2) instance CZipWith B wheren cZipWith f (B x1 x2 x3) (B y1 y2 y3) = B (f x1 y1) (f x2 y2) (cZipWith f x3 y3) czipwith Derives a ! instance for a datatype of kind  (* -> *) -> *. * here)!there is exactly one constructor;9all fields in the one constructor are either of the form f x for some x or of the form X f for some type X where there is an instance CZipWithM X.0For example, the following would be valid usage: ·data A f = A { a_str :: f String , a_bool :: f Bool } data B f = B { b_int :: f Int , b_float :: f Float , b_a :: A f } deriveCZipWithM ''A deriveCZipWithM ''B &This produces the following instances: Òinstance CZipWithM A where cZipWithM f (A x1 x2) (A y1 y2) = A <$> f x1 y1 <*> f x2 y2 instance CZipWith B where cZipWithM f (B x1 x2 x3) (B y1 y2 y3) = B <$> f x1 y1 <*> f x2 y2 <*> cZipWithM f x3 y3        'czipwith-1.0.1.4-2BXiznJzaUjG0jyxx4mI5j Data.CZipWith CZipWithM cTraverse cZipWithMCZipWithcZipWithCFunctorcMapCPointedcPoint cSequencederiveCPointedderiveCZipWithderiveCZipWithMbaseData.Traversable TraversableGHC.Basefmap Applicativesequence sequenceA