, ap :: Monad m => m (a -> b) -> m a -> m b
m (->) r, . ap []:
ap m1 m2 = do
x1 <- m1
x2 <- m2
return (x1 x2)
, , :
ap m1 m2 = m1 >>= (\x1 -> m2 >>= return . x1)
>>= (->) r []:
instance Monad ((->) r) where
f >>= k = \ r -> k (f r) r
return = const
(return pure, const).
, , :
ap f g = f >>= (\x1 -> g >>= const . x1)
= f >>= (\x1 -> (\r -> (const . x1) (g r) r))
= \x -> (\x1 -> (\r -> (const . x1) (g r) r)) (f x) x
- (x1 is (f x)):
ap f g = \x -> (\r -> (const . (f x)) (g r) r) x
- (r - x):
ap f g = \x -> (const . (f x)) (g x) x
const \c _ -> c (.) f . g `\ z → f (g z):
ap f g = \x -> ((\c _ -> c) . (f x)) (g x) x
= \x -> (\z -> (\c _ -> c) ((f x) z)) (g x) x
- (z is (g x), c - ((f x) (g x))):
ap f g = \x -> ((\c _ -> c) ((f x) (g x))) x
= \x -> (\_ -> ((f x) (g x))) x
, - (_ is x):
ap f g = \x -> ((f x) (g x))
x :
ap f g x = (f x) (g x)
Haskell f x y (f x) y, , :
ap f g x = (f x) (g x)
= f x (g x)
.