我想创建一个模板哈斯克尔功能使得:Haskell:如何判断一个类是否是类的一个实例?
$(isInstanceOf ''Read ''SomeType)
将导致True
如果SomeType
是任Read
一个实例,False
否则。
我试着看看reify
的结果,我想我正在寻找ClassI
构造函数的内容,但文档有点缺乏,我无法破译我需要的东西。有人可以提供指导,了解在何处寻找创建上述功能所需的数据?
我想创建一个模板哈斯克尔功能使得:Haskell:如何判断一个类是否是类的一个实例?
$(isInstanceOf ''Read ''SomeType)
将导致True
如果SomeType
是任Read
一个实例,False
否则。
我试着看看reify
的结果,我想我正在寻找ClassI
构造函数的内容,但文档有点缺乏,我无法破译我需要的东西。有人可以提供指导,了解在何处寻找创建上述功能所需的数据?
模板Haskell已经提供了a function那差不多你想要什么。它是2.5版本以前的版本,在此之前我根本没有意识到有任何方法可以查找实例。
所不同的是,现有的isClassInstance
功能需要一个Name
的类 - 这是你从像''Read
- 但一个Type
得到什么,以寻找与实例。这可能更有意义,因为使用Name
没有明显的方法来检查需要类型参数的实例。例如,您将无法直接检查[Int]
是否有Show
实例,或者Either String
是否为Monad
实例。
请注意,Type
可以使用一个引号,例如与Name
几乎一样容易地构建。你可以写一些像$(isInstanceOf ''Monad [t| Either String |])
的东西。
鉴于上述情况,您所要做的只是从拼接中返回一个有用的值,无论您希望如此。