haskell - 是否可以使用例如 unsafeCoerce 引入额外的约束?
问题描述
是否可以使用 unsafeCoerce (或其他一些不安全的功能)来“弥补”例如类型的 Typeable 约束?即,将类型从 a 更改forall v. v
为存在forall v. Typeable v => v
?
我的情况是,我有一些数据类型/函数可以处理所有类型a
,但确实需要调用typeOf
和/或调用toDyn
它们。结果不会破坏参数性,但不可能说服类型检查器。
准确地说,我需要将某些类型转换为Dynamic
然后再转换回来。然而,目前的要求Typeable
阻止了诸如Functor
,Applicative
等类型类的实现。
(我知道存在另一种称为“约束归一化深度嵌入”的技术,以允许需要约束的类型仍然实现这些类型的类型。但是,这种技术不适用于包含循环的数据类型,因为降低操作将无限循环。)
那么有没有办法说服类型检查员在这里信任我呢?即使它很不安全?
解决方案
推荐阅读
- java - setTransform 旋转图像会产生意想不到的结果
- visual-studio-code - 文件未显示在 vscode 侧边栏上
- python - 在 Matplotlib 和 gridscpec 中为两个子图放置一个颜色条
- perl - 出现错误无法为模块 Wx 加载“/usr/local/lib64/perl5/auto/Wx/Wx.so”
- javascript - 如何为 Authenticated Api 调用编写 React 测试用例?
- javascript - 如何编写一个以数组为参数的函数,它返回一个新数组,其中包含原始数组的所有值但顺序相反
- ruby-on-rails - 为什么我不能执行 $ bundle exec rake secret?出现错误“错误的解释器:没有这样的文件或目录”
- html - 我们如何在 karma jasmine angular 中为选中和未选中属性编写输入复选框的单元测试用例?
- c# - 访问矩形数组时出现 NullReferenceException
- javascript - 有没有一种方法来表示自定义条形图?