<p dir="ltr">> Have you considered making Temporal a Monad? All monads by definition<br>
> provide a `join :: m (m a) -> m a` which flattens their nested<br>
> structure.</p>
<p dir="ltr">Actually `join` is exactly the operation that makes the difference between Monad and Applicative Functor. Monad's binding operation can easily be defined using a combination of `join` and `fmap`:</p>
<p dir="ltr">(>>=) m f = join (fmap f m)</p>
<p dir="ltr">So my bet is that the answer to the OP's question lies in Monad.</p>