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)
我強烈懷疑表達式左右相等,但如何證明呢?這總是如此:fmap(foldr f z)。 sequenceA = foldr(liftA2 f)(pure z)
你假設所有建議的法律保留,否則我會說答案是否定的。 – augustss 2011-05-19 11:51:59
是的,我假設法律適用。當證明t = []時,我需要Applicative的組合,同態和fmap規則。 – 2011-05-19 12:08:29