Доброго вечера всем!
Пожалуйта, помогите понять как de-sugar'ится этот пример к cont monad:
whatsYourName :: String -> String
whatsYourName name =
(`runCont` id) $ do
response <- callCC $ \exit -> do
validateName name exit
return $ "Welcome, " ++ name ++ "!"
return response
validateName name exit = do
when (null name) (exit "You forgot to tell me your name!")
...конкретно интересует вот это место, не могу понять как соединяются эти два вычисления:
... -> do
validateName name exit
return $ "Welcome, " ++ name ++ "!"
Судя по всему тут действует это правило преобразования do-нотации:
do { e; stmts } = e >> do { stmts }
Если это так, то я не смог найти определения >> для Cont... или в хаскеле есть какая-то обобщённая реализация >> для всех монад? Что-то я совсем запутался...