On Mon, Feb 11, 2013 at 09:32:25AM +0100, Petr Pudlák wrote: > While the implementation of Applicative can be defined without actually using > `delay`: > > newtype ArrowApp a b c = ArrowApp (a b c) > > instance Arrow a => Functor (ArrowApp a b) where > fmap f (ArrowApp a) = ArrowApp (a >>^ f) > instance ArrowDelay a => Applicative (ArrowApp a b) where > pure x = > ArrowApp $ arr (const x) > (ArrowApp af) <*> (ArrowApp ax) = > ArrowApp $ (af &&& ax) >>^ uncurry ($) > > I believe it only satisfies the laws only if the arrow satisfies delay/force > laws.
This is a reader, which always satisfies the applicative laws. What ArrowDelay does is pick out the arrows that are equivalent to the static arrow, i.e. F(b->c), of some applicative functor F. _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
