在Haskell中确定运行时函数参数的兼容性

时间:2011-03-21 14:31:39

标签: haskell introspection

假设我有一个函数f1 :: a - > b - > ... - > c和另一个函数f2 :: PossibleTypeClass x y ... => x - > y - > ... - > z,我想在运行时确定c(f1的输出)是否可以作为x或y或任何其他输入传递给f2。

我确实对源有一些控制权,所以如果有一种生成元数据的方法(模板haskell,可能?)在运行时使用,那就没问题了。

换句话说......

我有许多功能(可能认为像箭头一样,计算的东西,可能是有状态的),它们有一组输入和输出。我想知道哪些输入能够与哪些输出连接,以便用户可以将它们连接在一起。一旦发生这种情况,我们就可以根据用户的配置方式生成代码(或类似内容)。

我自己编写的函数,或者用户也可以编写它们,所以我可能会以编译形式编写它们。但是如果它非常简单,我可能会要求代码中的某些内容生成元数据(如果需要)。

最大的挑战是类型类 - 如何确定输出的具体类型是否是输入类型类的实例。

2 个答案:

答案 0 :(得分:2)

根据你对你的问题的评论,我猜你所追求的是像GHC API或提示。两者都是访问刚刚编译的代码的AST表示的方法。 GHCi基于GHC API,提示是GHC API的一个很好的包装。

答案 1 :(得分:1)

我想,模块Data.Dynamic可以实现您的目标。它提供了代数数据类型Dynamic来进行动态编程。该模块保存使用,但您可能只使用单形类型。