<=<- A great way to explain the laws of the monad :
f <=< return = f -- right identity
return <=< g = g -- left identity
f <=< (g <=< h) = (f <=< g) <=< h -- associativity
Kleisli:
newtype Kleisli m a b = Kleisli { runKleisli :: a -> m b }
instance Monad m => Category (Kleisli m) where
Kleisli f . Kleisli g = Kleisli (f <=< g)
id = Kleisli return
, . =<<.
, , , >>= Haskell.
, , <=< - , , C- (C, ++, Java, Python, ..), .
"point-free" - , :
f a b = a + b * 2
f a = (a +) . (* 2)
f = flip (.) (*2) . (+)
, - , , eta conversion.
, , .
, , ,
" IO String, String?"
Haskell IO monad. , , , " ,
>>= ", >>=,
putStrLn "Your first name: " >>= \_ ->
getLine >>= \first ->
putStrLn "Your last name: " >>= \_ ->
getLine >>= \last ->
putStrLn ("Hello " ++ first ++ " " ++ last)
do
putStrLn "Your first name: "
first <- getLine
putStrLn "Your last name: "
last <- getLine
putStrLn ("Hello " ++ first ++ " " ++ last)
, , , >>= Monad,
<=< , , .
, ,
,
( -).