多义插件
奉献
不管你的理论有多漂亮,也不管你有多聪明你是。如果它与实验不一致,那就错了。
理查德-费曼
概述
一个typechecker插件,可以消除多义
.
例子
考虑以下程序:
foo::成员(状态Int)r=>Sem r()foo=放置10
这个程序做什么?任何人都会告诉你它改变了这个国际
到10,这显然是什么意思。
不幸的是,多义
这件事自己解决不了。其理由是“也许你想换一个州
效果是也一号码
,但你忘了添加成员
约束。”
这显然很疯狂,但这就是饼干破碎的方式。多义插件
是一个类型检查器插件,可以消除上面的歧义编写程序(和其他程序),以便编译器可以执行您想要的操作。
用法
将以下行添加到包配置中:
ghc-options:-fplugin=多边形。插件
限制
这个多义插件
只有在只有一个效果的情况下才能消除歧义范围中的相关约束。例如,它将不消除歧义以下程序:
bar::成员的[状态Int,状态双精度]r=>第r学期()bar=放置10
因为现在还不清楚您是否试图设置国际
或双精度
相反,在这种情况下,您可以手动编写类型应用程序。
bar::成员的[状态Int,状态双精度]r=>第r学期()bar=放置@Int 10
致谢
这个插件几乎是一字不差地从简单效果
.