いつものようにHaskellでは、あなたは通常、インライン化や用語書き換えることにより、いくつかのコードを理解することができます
を私たちは持っている:
Prelude> Just 0 >>= (\ x -> if (x == 0) then fail "zero" else Just (x + 1))
Nothing
私たちが必要とする最も重要なことは、fail
とのため>>=
の定義です与えMaybe
モナド、:
instance Monad Maybe where
(Just x) >>= k = k x
Nothing >>= _ = Nothing
(Just _) >> k = k
Nothing >> _ = Nothing
return = Just
fail _ = Nothing
は、私たちは持っている:
Just 0 >>= (\ x -> if (x == 0) then fail "zero" else Just (x + 1))
-- by definition of >>=
(\ x -> if (x == 0) then fail "zero" else Just (x + 1)) 0
-- by definition of fail
(\ x -> if (x == 0) then Nothing else Just (x + 1)) 0
-- beta reduce
if 0 == 0 then Nothing else Just (0 + 1)
-- Integer math
if True then Nothing else Just 1
-- evaluate `if`
Nothing
などあります。
確認と説明に感謝します:) – Tobi3