我可以在 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
我学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