@Override
    @SuppressWarnings("unchecked")
    public <D, App extends Applicative<?, App>, TravB extends Traversable<D, Choice3<A, B, ?>>,
            AppB extends Applicative<D, App>,
            AppTrav extends Applicative<TravB, App>> AppTrav traverse(Function<? super C, ? extends AppB> fn,
                                                                      Function<? super TravB, ? extends AppTrav> pure) {
        return match(a -> pure.apply((TravB) Choice3.<A, B, D>a(a)).coerce(),
                     b -> pure.apply((TravB) Choice3.<A, B, D>b(b)).coerce(),
                     c -> fn.apply(c).<Choice3<A, B, D>>fmap(Choice3::c).<TravB>fmap(Functor::coerce).coerce());
    }
@ Override @ SuppressWarnings ( "unchecked" ) public < D , App extends Applicative < ? , App > , TravB extends Traversable < D , Choice3 < A , B , ? > > , AppB extends Applicative < D , App > , AppTrav extends Applicative < TravB , App > > AppTrav traverse ( Function < ? super C , ? extends AppB > fn , Function < ? super TravB , ? extends AppTrav > pure ) { return match ( a -> pure . apply ( ( TravB ) Choice3 . < A , B , D > a ( a ) ) . coerce ( ) , b -> pure . apply ( ( TravB ) Choice3 . < A , B , D > b ( b ) ) . coerce ( ) , c -> fn . apply ( c ) . < Choice3 < A , B , D > > fmap ( Choice3 :: c ) . < TravB > fmap ( Functor :: coerce ) . coerce ( ) ) ; }
{@inheritDoc}