1
6
不,这是不可能的。在“只有类型信息”的上下文中,在运行时 不 信息类型信息被删除。因此,即使对于封闭类型,原则上可以证明给定所讨论的类型,您总是可以找到字典,但仍然需要类约束。类约束确保在编译时,当GHC知道类型时,它可以选择要传递的适当实例。在运行时,它是哪种类型的信息都会丢失,而且没有机会这样做。编写一个“一刀切”的实例确实有效,因为这样准确的类型对选择不再重要。 我不知道全貌,但可以通过将类字典或字符串本身与传递的值显式绑定来解决这个问题。。。 |
2
5
您可以添加其他类。
现在您仍然会被一个上下文所困扰,但它是一个更通用的上下文,可能对其他事情也有用。 如果结果证明你需要区分很多代理,那么你应该切换到GADT,你可以根据需要检查,而不是使用代理。 |
3
2
知道:
足以证明
Haskell类型变量(无约束)是参数化的:在
类型类约束允许您的代码在受约束的类型变量中是非参数的,尽可能使用类型类从类型到实现的映射来根据代码调用的类型切换代码的行为。所以
您可以使用
您可以使用类似dfeuer的答案,其中
您还可以使用一个类型,该类型是
(注意,我不仅可以实现
这是使用GADT
当然,现在要传递代理,您必须实际编写
然后你可以使用
GHCI:
注意,我实际上不需要
因为这是构造函数和类型之间的对应关系,所以我不相信您可以像在运行时使用空的那样以这种方式创建通用代理
|