是否可以使用 unsafeCoerce (或其他一些不安全的功能)来“弥补”例如类型的 Typeable 约束?即,将类型从 a 更改forall v. v
为存在forall v. Typeable v => v
?
我的情况是,我有一些数据类型/函数可以处理所有类型a
,但确实需要调用typeOf
和/或调用toDyn
它们。结果不会破坏参数性,但不可能说服类型检查器。
准确地说,我需要将某些类型转换为Dynamic
然后再转换回来。然而,目前的要求Typeable
阻止了诸如Functor
,Applicative
等类型类的实现。
(我知道存在另一种称为“约束归一化深度嵌入”的技术,以允许需要约束的类型仍然实现这些类型的类型。但是,这种技术不适用于包含循环的数据类型,因为降低操作将无限循环。)
那么有没有办法说服类型检查员在这里信任我呢?即使它很不安全?