Is there a library for parsing ghc-pkg dump? It looks like a cabal file … would Cabal work?
Context: I want to pipe a list of all modules in scope to fzf in an elisp script that adds imports to my file.
Is there a library for parsing ghc-pkg dump? It looks like a cabal file … would Cabal work?
Context: I want to pipe a list of all modules in scope to fzf in an elisp script that adds imports to my file.
It’s strange because the --help for ghc-pkg dump says
ghc-pkg-9.4.8 dump
Dump the registered description for every package. This is like
"ghc-pkg describe '*'", except that it is intended to be used
by tools that parse the results, rather than humans. The output is
always encoded in UTF-8, regardless of the current locale.
but the format doesn’t look obviously easy to parse, to me. It might be easier to hack ghc-pkg to dump the data in JSON format than to parse it.
I haven’t used ghc-pkg dump before. It looks like it outputs a bunch of *.cabal files separated by ---. That’s what the documentation says too:
Emit the full description of every package, in the form of an
InstalledPackageInfo. Multiple package descriptions are separated by the string---on a line by itself.
You certainly could parse all of those with Cabal, but it might be a bit tedious. I think you can use ghc-pkg by itself to get what you’re after.
# Get a space-separated list of package names:
$ ghc-pkg list --names-only --simple-output
# For each package, get a comma-separated list of module names:
$ ghc-pkg field base exposed-modules --simple-output
Does this part of the GHC User’s Guide assist: 5.9. Packages — Glasgow Haskell Compiler 9.12.1 User's Guide
An
InstalledPackageInfohas a human readable/writable syntax. The functionsparseInstalledPackageInfoandshowInstalledPackageInforead and write this syntax respectively.