如何通过名称运行Haskell代码?

时间:2015-11-24 21:00:17

标签: haskell reflection

首先,我是Haskell的新手,我很好奇我如何实现我用Java工作的东西。

有点史前史:

我有一个基于Java的项目与工人。工人可以定期开始并做一些工作。一个worker - 只是一个实现了一些功能的Java类。可以添加和配置新工作人员。工人的姓名和参数存储在数据库中。应用程序定期从DB收集工作人员的详细信息(名称,参数)并启动它们。在Java中,要按名称启动worker,我会执行以下操作:

Class<?> myClass = Class.forName("com.mycompany.superworker");
Constructor<?> constructor = myClass.getConstructor();
MyClass myInstance = (MyClass) constructor.newInstance();
myInstance.run("param1", "param2");

因此,应用程序从DB获取工作者的名字(实际的类名),获取类和构造函数,创建类的新实例,然后运行它。

现在,问题是:我如何在Haskell中实现类似的东西?我的意思是,如果我有一些在Haskell中实现的函数/模块/类,并且我的名称以纯文本形式存储,那么我如何通过其名称运行此代码(当然,来自基于Haskell的主应用程序)?

由于

更新

关于应用程序的更多信息...... 我有一个应用程序从Internet获取一些数据,做一些解析工作并将结果放入DB。我们有各种各样的网站,我们从中获取数据,因此我们有各种各样的解析器。这些解析器是工作者。用户可以实现自己的worker(java类),并通过UI将其详细信息放入DB中。所以我们在DB中存储worker(及其params)的名称。到了时候,我们去DB,收集工人的班级名称并实例化并启动每个工人。

工人之间不需要沟通。应用程序也不需要与工作人员通信。应用程序只是启动一个worker,worker从web获取数据,进行一些解析,并将结果放入DB。就是这样。

因此,工作人员可以作为一个单独的流程启动。

主要问题(对我来说)是我们没有一定数量的工人。用户可以实现自己的worker,编译它,重新启动应用程序,应用程序应该知道如何启动这个新worker。因此,我们将工作者的类名存储在DB中,并使用Java反射来启动它们。

我正在寻找如何在Haskell中编写这样的应用程序 - 以Haskell的方式编写,而不是仅仅复制现有的Java方式。

0 个答案:

没有答案