gpt4 book ai didi

Haskell:在 Monads 中做符号并返回

转载 作者:行者123 更新时间:2023-12-03 14:56:21 25 4
gpt4 key购买 nike

假设我有以下代码

do {x <- (Just 3); y <- (Just 5); return (x:y:[])}

哪个输出 Just [3,5]
haskell怎么知道输出值应该在 Maybe单子(monad)?我的意思是 return可以输出 [[3, 5]] .

最佳答案

do {x <- (Just 3); y <- (Just 5); return (x:y:[])}

脱糖
Just 3 >>= \x -> Just 5 >>= \y -> return $ x:y:[]

由于 >>= 的类型是 Monad m => m a -> (a -> m b) -> m b和每个参数 Just 3 (或者 Just 5 )我们有 m ~ Maybe , 表达式的返回类型必须是一些 Maybe类型。

有可能返回 [[3, 5]]使用名为 natural transformations 的东西来自 category theory .因为存在从 Maybe a 的自然变换。至 [a] ,即
alpha :: Maybe a -> [a]
alpha Nothing = []
alpha (Just a) = [a]

我们知道您想要的功能只是应用于结果的自然变换:
alpha (Just 3 >>= \x -> Just 5 >>= \y -> return $ x:y:[])
-- returns [[3, 5]]

由于这是自然变换,您也可以申请 alpha首先和你的功能第二:
alpha (Just 3) >>= \x -> alpha (Just 5) >>= \y -> return $ x:y:[]
-- returns [[3, 5]]

正如@duplode 指出的那样,您可以找到 alpha包装内 Data.MaybemaybeToList .

关于Haskell:在 Monads 中做符号并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42229584/

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