= (\a -> Just 5 >>= (\b -> return $ a+b)) 现在,让我们看看 >>= 是如何为 Maybe 定义的。-6ren">
gpt4 book ai didi

haskell - "<-"和相关值

转载 作者:行者123 更新时间:2023-12-04 13:04:25 27 4
gpt4 key购买 nike

假设我编写了以下惊人的代码:

func = do
a <- Just 5
return a

这很没有意义,我知道。在这里, a5 , 和 func返回 Just 5 .

现在我重写了我很棒的(但毫无意义的)函数:
func' = do
a <- Nothing
return a

此函数返回 Nothing ,但到底是什么 a ?从 Nothing 中没有什么可提取的值(value),但是当我做这样的事情时,程序不会发出呜呜声:
func'' = do
a <- Nothing
b <- Just 5
return $ a+b

我只是很难看到实际发生的事情。什么是 a ?换句话说: <- 是什么意思?实际上呢?说它“从右侧提取值并将其绑定(bind)到左侧”显然过于简单化了。我没有得到什么?

谢谢 :)

最佳答案

让我们尝试对最后一个示例的 do-notation 进行脱糖。

func'' = Nothing >>= (\a -> Just 5 >>= (\b -> return $ a+b))

现在,让我们看看 >>= 是如何为 Maybe 定义的。它在前奏曲中:
instance  Monad Maybe  where
(Just x) >>= k = k x
Nothing >>= k = Nothing
return = Just
fail s = Nothing

所以 Nothing >>= foo简直是 Nothing

关于haskell - "<-"和相关值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10204897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com