我想传递一些自定义的、可执行的库配置(最好是一整袋的键值对,但至少是单个的 String
)从我的 .cabal
一直到 Setup.hs
's buildHook
.
供参考: buildHook
的参数。
buildHook
:: PackageDescription
-> LocalBuildInfo
-> UserHooks
-> BuildFlags -> IO ()
所以我希望得到的是... PackageDescription
's library
executables
字段,让我可以在不影响所有其他Cabal阶段的情况下访问自定义字段,我可以将其放在 .cabal
文件。这里有一个虚构的例子,基本上可以做到尽善尽美。
...
executable my-exe
main-is: my-main.hs
...
plugin-args:
myplugin:
foo: bar
baz: quux
所以我可以检索所有的 myplugin
键值对来获得 "foo" |-> "bar", "baz" |-> "quux"
等某种关联数据结构中。HashMap
.
请注意,我已经在做激烈的暴力在我的。Setup.hs
所以欢迎任何形式的黑客建议。如果需要,我可以覆盖所有 Setup.hs
钩子,以忽略everything-but-中的一些设置。buildHook
如果需要一些解决方案的话,我想从我的.cabal文件中传递一些自定义的、可执行的library配置(最好是一整袋键值对,但至少是一个字符串)到Setup.com。
虽然我没有在用户文档中找到它,但有一个叫 这块 BuildInfo
类型:
customFieldsBI :: [(String, String)]
自定义领域
x-
,存储在一个简单的assoc-list中。
所以你可以写
...
executable my-exe
main-is: my-main.hs
...
plugin-args:
x-myplugin: foo
然后用 lookup "x-myplugin" . view customFieldsBI :: (HasBuildInfo bi) => bi -> Maybe String
.
特别是: Executable
和 Library
有 HasBuildInfo
实例,所以你只需遍历一下 PackageDescription
在 buildHook
并对其进行处理 String
那里的价值。