gpt4 book ai didi

haskell - Haskell中是否有非递归绑定(bind)的语法,就像类似语言中的 `let`和 `let rec`之间的区别一样?

转载 作者:行者123 更新时间:2023-12-02 02:51:49 24 4
gpt4 key购买 nike

非递归绑定(bind)允许我隐藏绑定(bind)值,例如:

b a = let norec a = a + 10 in a

这里 let norec我自己创建的意思是 let绑定(bind)但不递归。

这在使用记录通配符时非常有用:
data MyRecord = MyRecord{ {- vary huuuuuge set of definitions -} }

foo MyRecord{..} = let norec field1 = field1 + 1
field2 = modify field2
{- some other modifications to the fields -}
in MyRecord{..}

这是可以实现的吗?或者你在你的情况下如何处理它?

最佳答案

记录通配符在这里真的有用吗?通常的旧做事方式对我来说看起来很简洁:

foo r = r { field1 = field1 r + 1, field2 = modify (field2 r) }

您的问题的直接答案是没有 let 的非递归模拟。在 haskell ;虽然您可以使用 Identity monad 将某些东西固定到位:
foo MyRecord{..} = runIdentity $ do
field1 <- return (field1 + 1)
field2 <- return (modify field2)
return MyRecord{..}

关于haskell - Haskell中是否有非递归绑定(bind)的语法,就像类似语言中的 `let`和 `let rec`之间的区别一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31816937/

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