是否可以加载编译的代码来提示?

时间:2016-09-05 15:44:04

标签: haskell ghc

我有一个库,我希望我的可执行文件几乎是我在cabal repl时获得的,即我希望用户能够使用Haskell表达式,并导入模块并使用数据类型在我的图书馆中定义。

有可能吗?我认为hint只能使用源文件(用户无法使用),但我不确定。当我尝试从我的库或全局安装的cabal软件包加载模块时,我收到一条模糊的错误消息,指出该模块是一个软件包模块。事实上,我写的几乎所有内容都会这样做:

ghci> runInterpreter $ loadModules ["Not.A.Package.Module"]
Left (WontCompile [GhcError {errMsg = "<no location info>: error:\n    module \8216Not.A.Package.Module\8217 is a package module"}])

有没有办法做到这一点? (PS我正在使用GHC 8.0.1并且plugins不支持它,而且我也认为这是一个非常死的项目。如果还有另一种方法,hint&amp; {{1}我愿意接受它。)

1 个答案:

答案 0 :(得分:0)

您可以自己制作一个堆栈项目,并将您的代码放在Hackage上。

然后在您的项目中将该包添加到build-depends文件的*.cabal部分。 然后,只需使用setImportsQ中的hint导入您需要的内容。

示例取决于ChartChart-diagrams

build-depends:       base
                     ...
                     , Chart
                     , Chart-diagrams

然后在你的评估函数中:

setImportsQ[ ("Prelude",Nothing)
           , ("Graphics.Rendering.Chart.Easy", Nothing)
           , ("Graphics.Rendering.Chart.Backend.Diagrams", Nothing)
           ]