second ≡ bimap id
>>> second (+1) ('j', 3) ('j',4)
>>> second (+1) (Right 3) Right 4
second' ≡ dimap swap swap . first' lmap snd ≡ rmap snd . second' lmap (first' f) . second' ≡ rmap (first' f) . second' second' . second' ≡ dimap unassoc assoc . second' where assoc ((a,b),c) = (a,(b,c)) unassoc (a,(b,c)) = ((a,b),c)
unsecond ≡ unfirst . dimap swap swap lmap ((),) ≡ unsecond . rmap ((),) unsecond . lmap (first f) ≡ unsecond . rmap (first f) unsecond . unsecond = unsecond . dimap unassoc assoc where assoc ((a,b),c) = (a,(b,c)) unassoc (a,(b,c)) = ((a,b),c)