Estoy tratando de hacer un programa que tipee archivos haskell para mí usando la API GHC. Obtuve el tipo de comprobación para trabajar con los archivos locales, pero tengo un paquete cabal específico que necesito tener disponible también (el mismo paquete del que formará parte este ejecutable). ¿Cómo se agrega esta dependencia de importación?Encontrando paquetes cabal al usar la API GHC
También intenté compilar con la línea de comandos de ghc para resolver esto, usando ghc -package PKG-VER --make Test.hs -v
pero parece que solo busca en el directorio local las importaciones.
Mi código actual es el siguiente:
import Control.Exception
import Control.Monad
import Control.Monad.State
import DynFlags
import Exception
import GHC
import GHC.Paths (libdir)
typecheck :: MonadIO m => [FilePath] -> FilePath -> m()
typecheck otherincludes fp =
liftIO . defaultErrorHandler defaultLogAction . runGhc (Just libdir) $ do
dynflags <- getSessionDynFlags
void $ setSessionDynFlags dynflags { includePaths = otherIncludes ++ includePaths dynflags }
target <- guessTarget fp Nothing
setTargets [target]
void $ load LoadAllTargets
deps <- depanal [] False
forM_ deps $ \ms -> parseModule ms >>= typecheckModule
El paquete http://hackage.haskell.org/package/buildwrapper hace exactamente esto. Puedes usarlo como referencia. – arrowd