gpt4 book ai didi

具有不同字段名称的记录的 haskell 变体

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

鉴于此:

data Foo = Bar { name :: String } | Baz { nickname :: String }

函数 namenickname 似乎都是 Foo -> String 类型:

:t name
name :: Foo -> String

:t nickname
nickname :: Foo -> String

但是,定义不完整,因为以下两个表达式都会引发模式匹配错误:

name $ Baz { nickname = "Bob" }
nickname $ Bar { name = "Fred" }

是否可以完成namenickname的定义,例如:

name Baz { nickname = n } = ...

nickname Bar { name = n } = ...

在拥抱中尝试这个会产生诸如“变量名的多个声明”之类的错误。

最佳答案

不,这是不可能的。字段名称是关于范围的顶级函数,因此不能重新定义或扩展。使它们成为完整的功能就像使 head 成为一体一样。

关于具有不同字段名称的记录的 haskell 变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9286722/

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