import Prelude hiding (foldr)
import Control.Applicative
import Data.Foldable
import Data.Traversable
left, right :: (Applicative f, Traversable t) => (a -> b -> b) -> b -> t (f a) -> f b
left f z = fmap (foldr f z) . sequenceA
right f z = foldr (liftA2 f) (pure z)
我强烈怀疑左右表达式相等,但是如何证明呢?