module Hhp.PkgDoc (packageDoc) where
import System.Process (readProcess)
import Hhp.GhcPkg
import Hhp.Types
packageDoc
:: Options
-> Cradle
-> ModuleString
-> IO String
packageDoc :: Options -> Cradle -> [Char] -> IO [Char]
packageDoc Options
_ Cradle
cradle [Char]
mdl = Cradle -> [Char] -> IO [Char]
pkgDoc Cradle
cradle [Char]
mdl
pkgDoc :: Cradle -> String -> IO String
pkgDoc :: Cradle -> [Char] -> IO [Char]
pkgDoc Cradle
cradle [Char]
mdl = do
[Char]
pkg <- [Char] -> [Char]
trim ([Char] -> [Char]) -> IO [Char] -> IO [Char]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [[Char]] -> [Char] -> IO [Char]
readProcess [Char]
"ghc-pkg" [[Char]]
toModuleOpts []
if [Char]
pkg [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
""
then [Char] -> IO [Char]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return [Char]
"\n"
else do
[Char]
htmlpath <- [Char] -> [[Char]] -> [Char] -> IO [Char]
readProcess [Char]
"ghc-pkg" ([Char] -> [[Char]]
toDocDirOpts [Char]
pkg) []
let ret :: [Char]
ret = [Char]
pkg [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Int -> [Char] -> [Char]
forall a. Int -> [a] -> [a]
drop Int
14 [Char]
htmlpath
[Char] -> IO [Char]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return [Char]
ret
where
toModuleOpts :: [[Char]]
toModuleOpts =
[[Char]
"find-module", [Char]
mdl, [Char]
"--simple-output"]
[[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [GhcPkgDb] -> [[Char]]
ghcPkgDbStackOpts (Cradle -> [GhcPkgDb]
cradlePkgDbStack Cradle
cradle)
toDocDirOpts :: [Char] -> [[Char]]
toDocDirOpts [Char]
pkg =
[[Char]
"field", [Char]
pkg, [Char]
"haddock-html"]
[[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [GhcPkgDb] -> [[Char]]
ghcPkgDbStackOpts (Cradle -> [GhcPkgDb]
cradlePkgDbStack Cradle
cradle)
trim :: [Char] -> [Char]
trim = (Char -> Bool) -> [Char] -> [Char]
forall a. (a -> Bool) -> [a] -> [a]
takeWhile (Char -> [Char] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Char]
" \n")