我可以在Haskell上创建一个可扩展(通过其他自定义插件)应用程序吗?

我可以在Haskell上创建一个可扩展(通过其他自定义插件)应用程序吗?,haskell,Haskell,我学哈斯克尔 当我在C#上编写应用程序时,我做到了这一点。也就是说,它可以通过加载额外的自定义DLL文件(插件或扩展名-相同)进行扩展。我的托管应用程序通过反射机制通过它们的一些属性找到必要的类和方法,并将它们注册到我的应用程序的公共命令注册表中。但是我可以这样做,因为.NET Framework有反射技术。因此,我可以在应用程序的基础上扩展函数,而无需重新编译它 我可以在Haskell上创建一个可扩展(通过其他自定义插件)应用程序吗?Haskell的机制类似于.NET Framework的反射

我学哈斯克尔

当我在C#上编写应用程序时,我做到了这一点。也就是说,它可以通过加载额外的自定义DLL文件(插件或扩展名-相同)进行扩展。我的托管应用程序通过
反射
机制通过它们的一些属性找到必要的类和方法,并将它们注册到我的应用程序的公共命令注册表中。但是我可以这样做,因为.NET Framework有
反射
技术。因此,我可以在应用程序的基础上扩展函数,而无需重新编译它


我可以在Haskell上创建一个可扩展(通过其他自定义插件)应用程序吗?Haskell的机制类似于.NET Framework的
反射
?或者在Haskell中可能存在其他方法来实现同样的功能。

有一个GHC库可以动态加载。也有一些人支持某种方式,但这并不是真正的Haskell方式

相反,您可以向每个插件添加一个预定义类型的
注册插件
函数,然后在加载插件时调用该函数。作为插件一部分的函数可以根据需要对插件有尽可能多的了解,并且不需要自省。除了注册函数的类型之外,主代码不需要知道任何关于插件的信息


请注意,这在其他语言中也可以工作,而不需要内省,例如在C语言中。

我想这可能不太适合您,[XMonad][1]采用不同的方法。配置文件是Haskell源文件;当您更改配置并要求重新加载时,它会重新编译并重新启动。(基本上是无缝的)

[1] :XMonad

另请参见,一个抽象此模式的库。