4

我想创建一个模板 Haskell 函数,这样:

$(isInstanceOf ''Read ''SomeType)

将导致TrueifSomeType是 , 的实例ReadFalse否则。

我试图查看的结果,reify我想我正在寻找ClassI构造函数的内容,但是文档有些缺乏,而且我在破译我需要的东西时遇到了麻烦。有人可以就在哪里查找创建上述函数所需的数据提供指导吗?

4

1 回答 1

3

模板 Haskell 已经提供了一个功能几乎可以满足您的需求。它从 2.5 版开始就存在,在此之前我根本不知道有任何方法可以查找实例。

不同之处在于,现有isClassInstance函数采用 aName作为类——这是你从类似的东西中得到的——但''Reada 是Type用来寻找实例的。这可能更有意义,因为Name没有明显的方法来检查需要类型参数的实例。例如,您将无法直接检查是否[Int]Show实例,或者是否Either StringMonad实例。

请注意,aType几乎可以像Name使用引号一样简单地构造,例如,您可以编写类似$(isInstanceOf ''Monad [t| Either String |]).

鉴于上述情况,您所要做的就是花点功夫从拼接处返回一个有用的值,无论您想要什么。

于 2012-01-11T22:57:22.203 回答