The ghc-imported-from package

[Tags: bsd3, library, program]

Given a Haskell module and symbol, determine the URL to the Haddock documentation for that symbol.


[Skip to ReadMe]

Properties

Versions0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.0.3, 0.1.0.4, 0.2.0.0, 0.2.0.1, 0.2.0.2, 0.2.0.3, 0.2.0.4, 0.2.0.5, 0.2.0.6
Change logchangelog.md
Dependenciesbase (>=4.6 && <4.8), Cabal (>=1.10 && <1.17 || >=1.18), containers, directory, filepath, ghc, ghc-imported-from, ghc-mod (>=4.1.1), ghc-paths, ghc-syb-utils, hspec, mtl, optparse-applicative, parsec, process, safe, syb, transformers [details]
LicenseBSD3
AuthorCarlo Hamalainen
Maintainercarlo@carlo-hamalainen.net
CategoryDevelopment
Home pagehttps://github.com/carlohamalainen/ghc-imported-from
Executablesghc-imported-from, fake-ghc-for-ghc-imported-from
UploadedSat Jul 5 05:41:56 UTC 2014 by CarloHamalainen
DistributionsNixOS:0.2.0.6
Downloads1517 total (71 in last 30 days)
Votes
0 []
StatusDocs available [build log]
Successful builds reported [all 1 reports]

Modules

[Index]

Downloads

Maintainers' corner

For package maintainers and hackage trustees

Readme for ghc-imported-from-0.2.0.6

ghc-imported-from

For a given Haskell source file, determine the path to the Haddock documentation for a symbol at a particular line/col location.

Example: on the file src/Main.hs,

ghc-imported-from haddock-url src/Main.hs Main getArgs 69 13

says

SUCCESS: file:///home/carlo/opt/ghc-7.6.3_build/share/doc/ghc/html/libraries/base-4.6.0.1/System-Environment.html

since the usage of getArgs at line 160, column 13, is from the System.Environment module.

Difficulties arise because some symbols are exported from a certain package but defined in another, for example String is defined in GHC.Base but is exported from the standard prelude, the module Prelude. There are other cases to deal with including qualified imports, selective imports, imports with hidden components, etc.

Preference is given to any locally available Haddock documentation, and then to the generic url at hackage.org.

Beware

You may have to run

cabal build

or

cabal repl

in a project directory to sort out some of the dist/build/autogen files. At the moment ghc-imported-from has no functionality to do this boot process automatically. To run cabal repl you might need the latest Cabal from https://github.com/haskell/cabal.

If you see

<command line>: cannot satisfy -package hspec
    (use -v for more information)

then you may need the hspec and/or doctest packages:

cabal install hspec doctest

Feedback and pull requests most welcome!

Install

ghc-imported-from

Install into ~/.cabal:

git clone https://github.com/carlohamalainen/ghc-imported-from
cd ghc-imported-from
cabal install

Or, install into a sandbox:

git clone https://github.com/carlohamalainen/ghc-imported-from
cd ghc-imported-from
./build_in_sandbox.sh

Either way, ensure that ghc-imported-from and fake-ghc-for-ghc-imported-from are in the current PATH.

Tests

Run the tests using cabal:

cabal test

If the tests hang, check that your version of Cabal/cabal-install has this fix: https://github.com/haskell/cabal/issues/1810

ghcimportedfrom-vim

Follow the instructions at https://github.com/carlohamalainen/ghcimportedfrom-vim to install the Vim plugin.

Usage

See the tests subdirectory for some examples. Or load your favourite Haskell project and hit F4.

Or watch the screencast (be sure to set 720p HD and then fullscreen):

https://www.youtube.com/watch?v=7yO_VGCWMu8

Notes

ghc-imported-from uses both GHC and ghc-pkg, which accept arguments in differing formats. For example GHC takes -package-db while ghc-pkg takes --package-db=. For more details: http://www.vex.net/~trebla/haskell/sicp.xhtml

Debugging

To see the GHC options that have been automatically detected, change into your project's directory and run:

$ cd ~/ghc-imported-from
$ cabal repl --with-ghc=fake-ghc-for-ghc-imported-from
Preprocessing library ghc-imported-from-0.2.0.2...
--interactive -fbuilding-cabal-package -O0 -outputdir dist/build -odir dist/build -hidir dist/build -stubdir dist/build -i -idist/build -i. -idist/build/autogen -Idist/build/autogen -Idist/build -optP-include -optPdist/build/autogen/cabal_macros.h -package-name ghc-imported-from-0.2.0.2 -hide-all-packages -no-user-package-db -package-db /home/user/ghc-imported-from/.cabal-sandbox/x86_64-linux-ghc-7.6.3-packages.conf.d -package-db dist/package.conf.inplace -package-id Cabal-1.16.0-c6e09e008cd04cf255c1ce0c59aba905 -package-id base-4.6.0.1-8aa5d403c45ea59dcd2c39f123e27d57 -package-id containers-0.5.0.0-ab1dae9a94cd3cc84e7b2805636ebfa2 -package-id directory-1.2.0.1-91a788fd88acd7f149f0f10f5f1e23f2 -package-id filepath-1.3.0.1-b12cbe18566fe1532a1fda4c85e31cbe -package-id ghc-7.6.3-18957ddbb817289f604552aa2da2e879 -package-id ghc-mod-4.1.0-a87501f2667239b3f0bef3e0f3753496 -package-id ghc-paths-0.1.0.9-3817f31ae510ed3b58554933ea527b74 -package-id ghc-syb-utils-0.2.1.2-bf72c1e71339c52f0af404a12449c9d2 -package-id mtl-2.2.0.1-ef91e0abcf7a4fb581ecb7fe83cdcba1 -package-id process-1.1.0.2-76e05340eb66705981411022731ca84a -package-id safe-0.3.4-ba52ca348aecad429ba90450e3aba4c4 -package-id syb-0.4.1-9469ffdd9c6a7ebbf035421c915a08ee -package-id transformers-0.4.1.0-42810d723884ebf2a2dd638e5b22e523 -XHaskell2010 Language.Haskell.GhcImportedFrom Language.Haskell.GhcImportedFrom.UtilsFromGhcMod Language.Haskell.GhcImportedFrom.Types -Wall

Alternatives

As far as I know the only alternative is the fpco/hoogle-doc function in https://www.fpcomplete.com/page/api. Or try Ctrl-i in the web version of FP Complete.