Haskell 的 Data.Typeable 是什么?
我遇到过对 Haskell 的 Data.Typeable
的引用,但我不清楚为什么要在我的代码中使用它。
它解决了什么问题以及如何解决?
I've come across references to Haskell's Data.Typeable
, but it's not clear to me why I would want to use it in my code.
What problem does it solve, and how?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(4)
诗化ㄋ丶相逢2024-11-25 18:46:07
我能找到的最早的 Haskell 类 Data.Typeable
库的描述之一是 John Peterson 在 1992 年所做的: http://www.cs.yale.edu/publications/techreports/tr1022.pdf
我所知道的最早介绍实际情况的“官方”论文Data.Typeable
库是 2003 年第一篇 Scrap Your Boilerplate 论文:http://research.microsoft.com/en-us/um/people/simonpj/Papers/hmap/index.htm
我确信有很多干预历史,有人这里可以插话!
锦爱2024-11-25 18:46:07
使用 Data.Typeable 类主要用于 废弃您的样板 (SYB) 风格。
另请参阅 Data.Data SYB定义了一个集合组合器,用于在各种用户创建的类型上以统一的方式执行打印、计数、搜索、替换等操作。 Typeable
类型类提供了必要的管道。
在现代 GHC 中,您可以在定义自己的类型时直接说deriving Data.Typeable
,以便为其提供必要的实例。
~没有更多了~
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
Data.Typeable
是一种众所周知的方法(参见 Harper)的编码,用于在静态类型语言中实现延迟(动态)类型检查 - 使用通用类型。这种类型包装了类型检查直到稍后阶段才会成功的代码。编译器不会将程序作为错误类型而拒绝,而是将其传递给运行时检查。
该风格起源于 Abadi 等人,并由 Cheney 和 Hinze 为 Haskell 开发,作为表示所有动态类型的包装器,其中
Typeable
类作为 SPJ 和 Lammel 的 SYB 工作的一部分出现。参考
即使在教科书中:动态类型(具有可类型表示)也是只有一种类型的静态类型语言,Harper ch 20:
Data.Typeable
is an encoding of an well known approach (see e.g. Harper) to implementing delayed (dynamic) type checking in a statically typed language -- using a universal type.Such a type wraps code for which type checking would not succeed until a later phase. Rather than reject the program as ill-typed, the compiler passes it on for runtime checking.
The style originated in Abadi et al., and developed for Haskell by Cheney and Hinze as a wrapper to represent all dynamic types, with the
Typeable
class appearing as part of the SYB work of SPJ and Lammel.Reference
Even in the text books: dynamic types (with typeable representations) are statically typed languages with only one type, Harper ch 20: