Functors supporting an align operation that takes the union of non-uniform shapes.
Minimal definition: either align or alignWith.
Laws
The laws of align and zip resemble lattice laws. There is a plenty of laws, but they are simply satisfied.
And an additional property if f is Foldable,
which tries to enforce align-feel:
neither values are duplicated nor lost.
Note: join f x = f x x
Idempotency
join align ≡ fmap (join These)
Commutativity
align x y ≡ swap <$> align y x
Associativity
align x (align y z) ≡ assoc <$> align (align x y) z
With
alignWith f a b ≡ f <$> align a b
Functoriality
align (f <$> x) (g <$> y) ≡ bimap f g <$> align x y
Alignedness, if f is Foldable
toList x ≡ toListOf (folded . here) (align x y)
≡ mapMaybe justHere (toList (align x y))
Methods
Instances18Semialign, …
Semialign IntMapDefined in semialign-1.3.1 · Data.Semialign.InternalSemialign SeqDefined in semialign-1.3.1 · Data.Semialign.InternalSemialign TreeDefined in semialign-1.3.1 · Data.Semialign.InternalSemialign NonEmptyDefined in semialign-1.3.1 · Data.Semialign.InternalSemialign IdentityDefined in semialign-1.3.1 · Data.Semialign.InternalSemialign ZipListDefined in semialign-1.3.1 · Data.Semialign.InternalzipWith =.liftA2Semialign MaybeDefined in semialign-1.3.1 · Data.Semialign.InternalSemialign VectorDefined in semialign-1.3.1 · Data.Semialign.InternalSemialign []Defined in semialign-1.3.1 · Data.Semialign.InternalMonad m => Semialign (Stream m)Defined in semialign-1.3.1 · Data.Semialign.InternalOrd k => Semialign (Map k)Defined in semialign-1.3.1 · Data.Semialign.InternalSemialign ProxyDefined in semialign-1.3.1 · Data.Semialign.Internal(Eq k, Hashable k) => Semialign (HashMap k)Defined in semialign-1.3.1 · Data.Semialign.InternalMonad m => Semialign (Bundle m v)Defined in semialign-1.3.1 · Data.Semialign.InternalSemialign (Tagged b)Defined in semialign-1.3.1 · Data.Semialign.InternalSemialign ((->) e)Defined in semialign-1.3.1 · Data.Semialign.Internal(Semialign f, Semialign g) => Semialign (Product f g)Defined in semialign-1.3.1 · Data.Semialign.Internal(Semialign f, Semialign g) => Semialign (Compose f g)Defined in semialign-1.3.1 · Data.Semialign.Internal