Вот определение простой, казалось бы, функции на Haskell
routine :: Int -> Maybe Int
routine x = do
y1 <- Just 1
y2 <- Just 2
return (y1 + x + y2)
routine от 3 будет Just 6
> routine 3
Just 6
Слегка изменим функцию
routine :: Int -> Maybe Int
routine x = do
y1 <- Just 1
_ <- Nothing
y2 <- Just 2
(
Read more... )
Comments 2
Reply
Если тело функции переписать без сахара как
bind (Just 1) (\y1 -> (bind Nothing (\_ -> (bind (Just 2) (\y2 -> Just (y1 + y2))))))
где bind определяется как
bind Nothing f = Nothing
bind (Just a) f = f a
то сразу видно, что вычисление заканчивается на bind Nothing f
В do-нотации это не так очевидно.
Reply
Leave a comment