ghc-magic-dict-compat:“GHC.Magic.Dict”中“withDict”的兼容层和GHC插件。

[bsd3型,兼容性,图书馆,类型系统][建议标签]

请参阅GitHub上的自述文件,网址为https://github.com/konn/ghc-magic-dict-compat#自述文件


[跳到自述]

下载

维修人员角落

包装维护人员

对于包维护者和黑客托管者

候选人

  • 没有候选人
版本[RSS(RSS)] 0.0.0.0
更改日志 CHANGELOG.md公司
依赖关系 基础(>=4.7 && <5),数据清单,温室气体,ghc-prim公司,ghc-tc插件[细节]
许可证 BSD-3条款
版权所有 2023(c)石井裕美
作者 石下博美
维护人员 konn.jinro_at_gmail.com
类别 类型系统,兼容性
主页 https://github.com/konn/ghc-magic-dict-compat#自述文件
Bug跟踪器 https://github.com/konn/ghc-magic-dict-compat/issues
源回购 头部:git克隆https://github.com/konn/ghc-magic-dict-compat
已上传 通过石井裕美2023-12-31T08:12:55Z
分配 尼克斯(NixOS):0.0.0.0
下载 总共43个(最近30天内有6个)
额定值 (尚未投票)[估算人贝叶斯平均]
您的评分
  • λ
  • λ
  • λ
状态 可用文档[生成日志]
上次成功报告时间:2023-12-31[所有1个报告]

ghc-magic-dict-compat-0.0.0.0自述文件

[返回包描述]

ghc-magic-dict-compat-兼容层和ghc插件使用Dict魔法函数

自GHC 9.4以来,编译器提供了神奇的类型类WithDict(包含Dict)及其成员函数使用Dict:

使用Dict::对于所有cls-meth{rr}(r::键入rr)。WithDict cls方法=>冰毒->(cls=>r)->第页

这是更安全的版本不安全强制为了(不安全地)为单例类动态生成实例字典,编译器在编译时静态检查前提条件。尽管这种组合符可能不安全,但在动态编写库操作实例字典时,它特别有用。

此软件包为使用Dict全球总部。神奇。Dict公司对于GHC<9.4。该软件包由以下两个模块组成:

  • 全球总部。神奇。Dict.Compat公司
  • 全球总部。神奇。Dict.插件

你所要做的就是导入GHC。神奇。Dict.Compat公司并将以下内容放在模块调用的顶部使用Dict:

{-#OPTIONS_GHC-fplugin GHC.Magic.Dict.Plugin#-}

全球总部。神奇。Dict.Compat公司提供类型类WithDict(包含Dict)使用DictGHC<9.4的组合子;它只是重新曝光GHC>=9.4。对于GHC<9.4,用户界面API几乎相同,除了使用Dict的成员函数WithDict(包含Dict).这是为了防止用户定义的WithDict(包含Dict)通过为隐藏的成员函数强加无法解决的默认签名。用户仍然可以参考WithDict(包含Dict)约束和使用使用Dict函数的方式与GHC中的几乎相同>=9.4,因此这种细微的差异不应该是一个大问题。

由于用户无法定义WithDict(包含Dict)手动全球总部。神奇。Dict.Compat公司单靠模块是不够的。这里是GHC插件全球总部。神奇。词典插件开始发挥作用。对于GHC<9.4,插件为以下对象生成字典WithDict(包含Dict)在编译时动态地使用与GHC>=9.4几乎相同的逻辑。对于较新的GHC,它没有。

用法

  1. 导入使用Dict(和使用Dict如有必要)全球总部。神奇。Dict.Compat公司
  2. 启用GHC插件全球总部。神奇。Dict.插件通过放置{-#GHC_OPTIONS-fplugin GHC.Magic.Dict.Plugin#-}在顶部或添加-fplugin集团总部。神奇。Dict.插件ghc选项包的。

有了这个,您可以自由使用使用DictGHC<9.4和>=9.4。

例子

{-#LANGUAGE RankNTypes、ScopedTypeVariables、TypeApplications、ConstraintKinds#-}{-#GHC_OPTIONS-fplugin GHC.Magic.Dict.Plugin#-}模块MyModule,其中进口GHC。神奇。Dict.Compat公司类给定位置给定::a给定::a->(给定a=>r)->rgive=withDict@(给定a)@a