Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
square_Cont :: Int -> Cont r Int
-- square_Cont x = return (x*x)
square_Cont = return . join (*)
incr_Cont :: Int -> Cont r Int
-- incr_Cont x = return (x+1)
incr_Cont = return . (+1)
func_Cont :: Int -> Cont r Int
{-
func_Cont x = do inc <- incr_Cont x
sq <- square_Cont inc
return sq
-}
func_Cont = (square_Cont =<<) . incr_Cont
foo :: Int -> Cont r String
foo s = do (i, back) <- getCC' s
when (i < 20) $ back (i*2)
return $ show i
func_cps :: Int -> (Int -> r) -> r
func_cps x k = incr_cps x $ \inc ->
square_cps inc $ \sq ->
k sq
иfunc_Cont :: Int -> Cont r Int
func_Cont x = do inc <- incr_Cont x
sq <- square_Cont inc
return sq
Продолжения в Haskell