gpt4 book ai didi

haskell - 如何在 ADT 或记录语法上使用 Monadic 绑定(bind)运算符

转载 作者:行者123 更新时间:2023-12-01 09:44:35 25 4
gpt4 key购买 nike

你好有人可以解释一下你如何在代数数据类型或记录语法的字段上使用单子(monad)绑定(bind)运算符吗?

例如

data M = M {myfield :: Int}
data N = N Int

所以对于 M,如果我想从 IO Int 操作中提取值到 myfield 中,我似乎不能说:

a = M { return 3 >>= value }

另外,我如何绑定(bind) N 类型?

最佳答案

该字段的类型为 Int , 所以你不能将它绑定(bind)到任何不同类型的东西,比如 IO Int .

但是,您可以运行 IO Int行动,得到一个Int返回并使用它。

foo :: IO Something
foo = do
i <- return 3 -- run your (IO Int) action
let a = M { myfield = i }
...
-- at the end, you have to use an (IO Something) action

相反,您可以转换 NM如下

convertNtoM :: N -> M
convertNtoM (N i) = M { myfield = i }

同样,这不会绑定(bind) Nmyfield ,但将整数“内部”绑定(bind)到 N值(value)。


如果要运行多个操作,并且要填写许多字段,则可以使用“应用程序样式”。

data K = K Int Int Int Int

action :: IO Int
action = return 3

foo :: IO K
foo = K <$> action <*> action <*> action <*> action

关于haskell - 如何在 ADT 或记录语法上使用 Monadic 绑定(bind)运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52292727/

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