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

And*_*man 11 haskell

我学习Haskell.

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

我可以在Haskell上创建可扩展(通过其他自定义插件)应用程序吗?Haskell的机制与Reflection.NET Framework 类似吗?或者也许存在以其他方式在Haskell中做同样的事情.

Fré*_*ont 16

有一个GHC库可以动态加载插件.对于一种内省也有一些支持,但这并不是Haskell的方式.

你可以做的是为register-plugin每个插件添加一个预定义类型的函数,然后在加载插件时调用该函数.作为插件一部分的函数可以根据需要获得对插件的尽可能多的知识,并且不需要内省.主代码不需要知道关于插件旁边的插件的任何内容register-function.

请注意,这也适用于其他语言而没有内省,例如在C中.