【发布时间】:2013-01-24 08:41:02
【问题描述】:
是否可以如下实现一个类型类:
class SomeClass e where
isEq :: (SomeClass e') => e -> e' -> Bool
当x 和y 都是该类型类的同一个实例时,isEq x y 会在哪里返回 true?
上下文:这是一种获得运行时类型测试的隐蔽尝试。起初我读到 Haskell 具有类型擦除功能,但我也读到了最近对 GHC 的扩展,其中包含一些运行时信息。
编辑:对于那些想知道我的用例的人...我一直在使用类型级编程来确保我的一些 ADT 的某些属性,即涉及资源使用。这些资源由不同的类型表示(资源锁相应地在类型级别实现)。
我正在尝试编写一个需要识别资源写入/读取的优化过程。但是由于我所有的资源都由不同的单例表示,其唯一的共同因素(除了所有值都是底部)是将它们组合在一起的类型类。
简而言之,我想在运行时、值级别使用我的类型级别编程的结果。
【问题讨论】:
-
你知道Data.Typeable吗?似乎相关...
-
这个问题具有误导性。您似乎想要并且答案提供了一种在运行时区分类型的方法。我对另一个问题感兴趣:是否可以在运行时枚举特定类型所包含的类。
-
@ThomasM.DuBuisson 没有对类型类进行量化(即 haskell 中没有类型类变量),因此不太可能。
-
@permeakra 不要急于回答,有提示显然是可以的(Haskell 的解释或 JIT 编译给出了运行时知识的效果)。问题更多:有没有比我们已经知道的可怕黑客更好的方法?
-
@ThomasM.DuBuisson 好吧,让我这样说:编译的模块不包含此类信息。类型类实例在运行时作为字典传递。
标签: haskell type-level-computation