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)
和使用Dict
GHC<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,它没有。
用法
- 导入
使用Dict
(和使用Dict
如有必要)全球总部。神奇。Dict.Compat公司
- 启用GHC插件
全球总部。神奇。Dict.插件
通过放置{-#GHC_OPTIONS-fplugin GHC.Magic.Dict.Plugin#-}
在顶部或添加-fplugin集团总部。神奇。Dict.插件
到ghc选项
包的。
有了这个,您可以自由使用使用Dict
GHC<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