# 1.3

- Depend on
`bifunctor-classes-compat`

instead of `bifunctors`

See changelog note in `bifunctors-5.6`

: https://hackage.haskell.org/package/bifunctors-5.6/changelog
This is breaking change, but affects only GHC-8.0 and older users.
In that case you should check various combinations of newer/older
`bifunctors`

, `these`

, and `semialign`

packages.

# 1.2.0.1

# 1.2

- Migrate
`SemialignWithIndex`

and `ZipWithIndex`

to this package,
using `FunctorWithIndex`

from `indexed-traversable`

.
- Add
`RepeatWithIndex`

type-class.
- Poly-kinded instances (notably
`Tagged`

)

# 1.1.0.1

- Drop
`base-compat`

dependency

# 1.1

- Split
`Semialign`

into `Semialign`

and `Zip`

.
- Rename old
`Zip`

into `Repeat`

- i.e. current main hierarchy is
- Remove
`malign`

, use `salign`

or `alignWith mappend`

where `Monoid`

is necessary.
- Add
`Option`

instances

```
instance Functor f => Semialign f where
alignWith :: (These a b -> c) -> f a -> f b -> f c
instance Semialign f => Align f where
nil :: f a
instance Semialign f => Zip f where
zipWith :: (a -> b -> c) -> f a -> f b -> f c
instance Zip f => Repeat f where
repeat :: a -> f a
```

This biased choice, that `Semialign`

is a super-class of `Zip`

is motivated by the fact that

- There’s no
`Semialign`

-like class anywhere else, yet
`Zip`

and `Repeat`

are `Apply`

(from `semigroupoids`

) and `Applicative`

with slightly more laws. I
If you need only `Repeat`

class, and your type isn’t `Aling`

able, maybe using `Applicative`

is enough?

# 1

Split out of `these`

package.