Did you know that you can navigate the posts by swiping left and right?
I’ve been reading some documentation of the GHC-API because it would be what I would need in order to complete my project. I was thinking about my project and I felt into the following question: if we have a type, how can we know which modules does it belongs to?
In GHCI we have a very interesting ‘command’ which is
:info <the_function_or_type_you_want_information_about>
So I was thinking that the answer to this question was in the code of this function. I had to look in the GHC source code. And I finally could solve this question. This is the source code:
import Control.Applicative import DynFlags import GHC import GHC.Paths import GhcMonad ( liftIO ) import HsImpExp ( simpleImportDecl ) --(+++) = liftA2 (++) preludeModuleName :: ModuleName preludeModuleName = GHC.mkModuleName "Prelude" implicitPreludeImport :: InteractiveImport implicitPreludeImport = IIDecl (simpleImportDecl preludeModuleName) main = defaultErrorHandler defaultFatalMessager defaultFlushOut $ do runGhc (Just libdir) $ do dflags <- getSessionDynFlags setSessionDynFlags $ dflags { hscTarget = HscInterpreted , ghcLink = LinkInMemory } setContext [implicitPreludeImport] let typesStr = ["Bool", "Integer", "String", "Char", "Double"] printNames typesStr where nameToStr name = moduleNameString $ moduleName $ nameModule name printNames [] = liftIO $ return () printNames (t:ts) = do names' <- GHC.parseName t liftIO $ mapM_ (putStrLn . (++) (t ++ " -> ") . nameToStr) names' printNames ts