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

Can I create an extensible (through additional custom plugins) application on Haskell?

我学Haskell。

当我在 C# 上编写应用程序时,我做到了 可扩展。 IE。它可以通过加载额外的自定义 DLL 文件(插件或扩展 - 是一样的)来扩展。我的托管应用程序通过 Reflection 机制通过它们的一些属性找到必要的 类 和方法,并将它们注册到我的应用程序的公共命令注册表中。但我可以做到,因为 .NET Framework 具有 Reflection 技术。因此,我可以 扩展我的应用程序的功能而无需重新编译它

我可以在 Haskell 上创建一个 可扩展 (通过额外的自定义插件)应用程序吗? Haskell 机制是否与 .NET Framework 的 Reflection 相似?或者可能存在其他方式在 Haskell.

中做同样的事情

有一个 GHC 库可以动态加载 plugins. There is also some support for a kind of introspection,但这并不是真正的 Haskell 方式。

您可以做的是为每个插件添加预定义类型的 register-plugin 函数,然后在加载插件时调用该函数。作为插件一部分的功能可以根据需要了解插件的尽可能多的知识,并且不需要自省。除了 register-function.

的类型之外,主代码不需要知道任何关于插件的信息

请注意,这在其他语言中也适用,无需自省,例如在 C 中。

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

[1]: http://xmonad.org/ XMonad