我说的是,这是不可能的定义:GHC Haskell为什么不支持重载记录参数名称?
data A = A {name :: String}
data B = B {name :: String}
我知道,GHC只是desugars这个平淡的功能和解决惯用的方式,这将是:
data A = A {aName :: String}
data B = B {bName :: String}
class Name a where
name :: a -> String
instance Name A where
name = aName
instance Name B where
name = bName
写完后我不喜欢那么多......难道这种类型分类是否是desugaring过程的一部分?
当我编写一些Aeson JSON解析时,这个想法来到了我的脑海。对于每种数据类型,只要derive the FromJSON
instances太简单了,我不得不手动将所有东西写出来(目前大于1k行和计数)。 像name
或简单地value
这样的名称在数据记录中并不罕见。
http://www.haskell.org/haskellwiki/Performance/Overloading提到函数重载引入了一些运行时开销。但我实际上并不明白为什么编译器无法在编译时解决这个问题,并在内部为它们指定不同的名称。
This SO question from 2012或多或少的状态历史原因和指向2006年的邮件主题。最近有什么变化吗?
即使会有一些运行时间开销,大多数人不会介意导致大多数代码几乎都是性能关键。
是否有一些隐藏的语言扩展,实际上允许这?我再次不确定......但我认为伊德里斯实际上做到了这一点?
另外:有人可以添加一个伊德里斯标签SO和这个问题?也许来自该社区的人也可以详细阐述。 – fho
祝贺成为第一个问题的偶像。如果您想了解更多关于这个主题的信息,可以在[ghc wiki](http://hackage.haskell.org/trac/ghc/wiki/Records)和[reddit上的对话](http:// www.reddit.com/r/haskell/comments/kgd4g/the_records_problem_in_haskell_help_build_a/)。 – Davorak
感谢您的链接。 GHC文档在我的谷歌搜索结果中似乎没有很好的排名。 – fho