-- http://stackoverflow.com/questions/23316255/lax-monoidal-functors-with-a-different-monoidal-structure pure a = fmap (const a) unit unit = pure () ff <*> fa = fmap (\(f,a) -> f a) $ ff ** fa fa ** fb = pure (,) <*> fa <*> fb