concrete functor and monad transformers
#68Lift's <*> is not lazy
The <*> implementation for Lift is not lazy in the sense that in order to get access to the contents of Other, the right operand of <*> must be in the WHNF.
This is easy to fix, e.g.:
instance (Applicative f) => Applicative (Lift f) where
    pure = Pure
    Pure f <*> ax = f <$> ax
    Other f <*> ax =
      Other $ f <*>
        (case ax of
          Pure x -> pure x
          Other y -> y
        )Please see https://ro-che.info/articles/2019-03-02-lazy-validation-applicative for the motivation.
- I've applied this, as I find this use convincing. My only reservation was that although all applicatives should satisfy - f <*> pure x = ($ x) <$> f, there might be some applicative for which the left side is more expensive.
- status set to closed
 - Thanks Ross!