For the sake of completeness, I will use this answer to expand on my comment above:

Though I didn't actually write down the proof, I believe the mixed-Free-and-Return cases of the composition law must hold due to parametricity. I also suspect that should be easier to show using the monoidal presentation.

The monoidal presentation of the Applicative instance here is:

unit = Return () Return x *&* v = (x,) <$> v u *&* Return y = (,y) <$> u -- I will also piggyback on the `Compose` applicative, as suggested above. Free u *&* Free v = Free (getCompose (Compose u *&* Compose v))

Under the monoidal presentation, the composition/associativity law is:

(u *&* v) *&* w ~ u *&* (v *&* w)

Now let's consider one of its mixed cases; say, the Free - Return - Free one:

(Free fu *&* Return y) *&* Free fw ~ Free fu *&* (Return y *&* Free fw) (Free fu *&* Return y) *&* Free fw -- LHS ((,y) <$> Free fu) *&* Free fw Free fu *&* (Return y *&* Free fw) -- RHS Free fu *&* ((y,) <$> Free fw)

Let's have a closer look at this left-hand side. (,y) <$> Free fu applies (,y) :: a -> (a, b) to the a values found in Free fu :: FreeMonad f a . Parametricity (or, more specifically, the free theorem for (*&*) ) means that it doesn't matter if we do that before or after using (*&*) . That means the left-hand side amounts to:

first (,y) <$> (Free fu *&* Free fw)

Analogously, the right-hand side becomes:

second (y,) <$> (Free fu *&* Free fw)

Since first (,y) :: (a, c) -> ((a, b), c) and second (y,) :: (a, c) -> (a, (b, c)) are the same up to reassociation of pairs, we have:

first (,y) <$> (Free fu *&* Free fw) ~ second (y,) <$> (Free fu *&* Free fw) -- LHS ~ RHS

The other mixed cases can be dealt with analogously. For the rest of the proof, see Benjamin Hodgson's answer.