úÎ!RSNç5      !"#$%&'()*+,-./01234 Trustworthy1MD6 semialignRight inverse of ."This class is definable for every 5. See .Laws 9uncurry zip (unzip xs) "a xs unzip (zip xs xs) "a (xs, xs) Note: 'unzip (zip xs ys) "b (xs, _) or (_, ys) @For sequence-like types this holds, but for Map-like it doesn't. semialign1Zippable functors supporting left and right unitsUnit >fst <$> zip xs (repeat y) "a xs snd <$> zip (repeat x) ys "a ys  semialignA repeat structure. semialignFunctors supporting a > operation that takes the intersection of non-uniform shapes.Minimal definition: either  or . Idempotency join zip "a fmap (join (,))  Commutativity zip x y "a swap <$> zip y x  Associativity ,zip x (zip y z) "a assoc <$> zip (zip x y) z  Absorption »fst <$> zip xs (align xs ys) "a xs toThis <$> align xs (zip xs ys) "a This <$> xs where toThis (This a) = This a toThis (These a _) = This a toThis (That b) = That b With zipWith f a b "a f <$> zip a b  Functoriality 0zip (f <$> x) (g <$> y) "a bimap f g <$> zip x y  Zippyness Pfmap fst (zip x x) "a x fmap snd (zip x x) "a x zip (fmap fst x) (fmap snd x) "a x Distributivity ÿ align (zip xs ys) zs "a undistrThesePair <$> zip (align xs zs) (align ys zs) distrPairThese <$> zip (align xs ys) zs "a align (zip xs zs) (zip ys zs) zip (align xs ys) zs "a undistrPairThese <$> align (zip xs zs) (zip ys zs) Note, the following doesn't hold: JdistrThesePair <$> align (zip xs ys) zs "b zip (align xs zs) (align ys zs) when xs = [] and  ys = zs = [0]%, then the left hand side is "only" [(6 0, 6 0)], but the right hand side is [(6 0, 7 0 0)]. semialigngCombines to structures by taking the intersection of their shapes and using pair to hold the elements. semialignvCombines to structures by taking the intersection of their shapes and combining the elements with the given function. semialign.Alignable functors supporting an "inverse" to 4: splitting a union shape into its component parts.Laws Auncurry align (unalign xs) "a xs unalign (align xs ys) "a (xs, ys) Compatibility note In version 1   was changed to return  (f a, f b) pair, instead of (f (Just a), f (Just b))5. Old behaviour can be achieved with if ever needed.>unzipWith (unalign . Just) [This 'a', That 'b', These 'c' 'd']9([Just 'a',Nothing,Just 'c'],[Nothing,Just 'b',Just 'd'])  semialign A unit of .Laws 4(`align` nil) "a fmap This (nil `align`) "a fmap That  semialignAn empty structure.  ing with  Y will produce a structure with the same shape and elements as the other input, modulo 8 or 6.  semialignFunctors supporting an 7 operation that takes the union of non-uniform shapes.Minimal definition: either  or .Laws The laws of  and R resemble lattice laws. There is a plenty of laws, but they are simply satisfied.And an addition property if f is 9, which tries to enforce /-feel: neither values are duplicated nor lost.Note: join f x = f x x Idempotency join align "a fmap (join These)  Commutativity align x y "a swap <$> align y x  Associativity 4align x (align y z) "a assoc <$> align (align x y) z With "alignWith f a b "a f <$> align a b  Functoriality 4align (f <$> x) (g <$> y) "a bimap f g <$> align x y  Alignedness, if f is 9 btoList x "a toListOf (folded . here) (align x y) "a mapMaybe justHere (toList (align x y)) And an addition property if f is 9, which tries to enforce /-feel: neither values are duplicated nor lost. btoList x = toListOf (folded . here) (align x y) = mapMaybe justHere (toList (align x y))  semialign Analogous to K, combines two structures by taking the union of their shapes and using 7 to hold the elements. semialign Analogous to t, combines two structures by taking the union of their shapes and combining the elements with the given function. semialign&Align two structures and combine with :. semialignAlign two structures as in , but filling in blanks with ;. semialignAlign two structures as in , but filling in blanks with ;. semialign Left-padded . semialign Left-padded . semialign Right-padded . semialign Right-padded .< semialign = liftA2 . = TrustworthyDñ     TrustworthyF      TrustworthyMÙ semialignKBifoldable bifunctors supporting traversal through an alignable functor.Minimal definition:  bicrosswalk or  bisequenceL.Laws: `bicrosswalk (const empty) (const empty) = const empty bicrosswalk f g = bisequenceL . bimap f g  semialignGFoldable functors supporting traversal through an alignable functor.Minimal definition:  crosswalk or  sequenceL.Laws: Ccrosswalk (const nil) = const nil crosswalk f = sequenceL . fmap f  Trustworthy4Nk )*+ )*+>      !"#$%&'()*+,-.//0123456789:;<=>?=>@=>A:BC:;D:EFGHI$semialign-1.1-HeKOcxoQZYUEIhtpgE7DU9Data.SemialignData.CrosswalkData.ZipData.Semialign.Internal Data.AlignUnzip unzipWithunzipRepeatrepeatZipzipzipWithUnalignunalign unalignWithAlignnil Semialignalign alignWith unzipDefaultalignVectorWithsalignpadZip padZipWith lpadZipWithlpadZip rpadZipWithrpadZip Bicrosswalk bicrosswalk bisequenceL Crosswalk crosswalk sequenceL$fCrosswalkCompose$fCrosswalk(,)$fCrosswalkVector$fCrosswalkThese$fCrosswalkSeq $fCrosswalk[]$fCrosswalkMaybe$fCrosswalkIdentity$fBicrosswalkThese$fBicrosswalkEitherZippygetZippy$fApplicativeZippy $fApplyZippy $fMonoidZippy$fSemigroupZippy $fEqZippy $fOrdZippy $fShowZippy $fReadZippy$fFunctorZippybaseGHC.BaseFunctor"these-1.0.1-3PdYwFApFPA6oE6wmsvleV Data.TheseThatTheseThis Data.FoldableFoldable<> GHC.MaybeNothing$fSemialignZipListoops