Синтаксический сахар может быть иногда вреден для понимания

Dec 29, 2012 19:16

Вот определение простой, казалось бы, функции на 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... )

Leave a comment

Comments 2

anonymous December 29 2012, 19:33:46 UTC
Э... Не проверяя - видимо, Nothing?

Reply

dmitry_rozhkov December 29 2012, 22:33:51 UTC
Ну да. Появление Nothing в контексте possible failure (Maybe) даёт Nothing.

Если тело функции переписать без сахара как

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

Up