gpt4 book ai didi

haskell - Eta reduce 和 DuplicateRecordFields 语言扩展

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

问题在于有 2 种数据类型,TransactionFormatModel , 两者都有 formatId field 。为了防止添加类型签名来获取 formatId来自 transactionformatModel , 我创建了类型类 HasFormat :

class HasFormat a where
formatId_ :: a -> FormatId

instance HasFormat Transaction where
formatId_ x = formatId x -- gives error because ambiguous occurrence ‘formatId’

instance HasFormat FormatModel where
formatId_ = formatId -- this works

有人能解释一下为什么 eta 减少了实现的实例正在工作而另一个没有吗?

最佳答案

重复记录字段的消歧必然是一种尽力而为的事情,因为它需要在类型检查之前发生(您通常不能在知道其中的名称所指的标识符之前对表达式进行类型检查;这就是消歧正在做)。

您的非工作示例等同于 documentation 中的这个非工作示例:

data S = MkS { x :: Int }
data T = MkT { x :: Bool }
bad :: S -> Int
bad s = x s

关于haskell - Eta reduce 和 DuplicateRecordFields 语言扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42533673/

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