gpt4 book ai didi

haskell - 为包含不能有 Eq 或 Show 的字段的 ADT 派生 Eq 和 Show

转载 作者:行者123 更新时间:2023-12-03 22:49:45 27 4
gpt4 key购买 nike

我希望能够推导出 EqShow对于包含多个字段的 ADT。其中之一是功能字段。做的时候Show ,我希望它显示一些虚假的东西,例如"<function>" ;做的时候Eq ,我希望它忽略该字段。在不为 Show 手写完整实例的情况下,我怎样才能最好地做到这一点?和 Eq ?
我不想将函数字段包裹在 newtype 中并写我自己的 EqShow为此 - 那样使用太麻烦了。

最佳答案

获得正确方法的一种方法 EqShow实例是为了,而不是对该函数字段进行硬编码,使其成为类型参数并提供一个仅“删除”该字段的函数。即,如果你有

data Foo = Foo
{ fooI :: Int
, fooF :: Int -> Int }
你把它改成
data Foo' f = Foo
{ _fooI :: Int
, _fooF :: f }
deriving (Eq, Show)
type Foo = Foo' (Int -> Int)

eraseFn :: Foo -> Foo' ()
eraseFn foo = foo{ fooF = () }
然后, Foo仍然不会是 Eq - 或 Show能够(毕竟它不应该),但要制作 Foo值显示你可以把它包装在 eraseFn .

关于haskell - 为包含不能有 Eq 或 Show 的字段的 ADT 派生 Eq 和 Show,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63548956/

27 4 0
文章推荐: apache-spark - 在 RDD 中 Spark 获取文件名
文章推荐: jquery - 如何使用 jQuery 验证插件验证 jQuery UI 组合框值?
文章推荐: jQuery - 为什么通过字符串 ($ ('
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com