module Hint.Conversions (
      typeToString, kindToString, moduleToString, isSucceeded
) where

import qualified Hint.GHC as GHC

import Hint.Base

-- --------- Types / Kinds -----------------------

typeToString :: MonadInterpreter m => GHC.Type -> m String
typeToString :: forall (m :: * -> *). MonadInterpreter m => Type -> m String
typeToString Type
t
 = do -- Unqualify necessary types
      -- (i.e., do not expose internals)
      PrintUnqualified
unqual <- forall (m :: * -> *) a. MonadInterpreter m => RunGhc m a
runGhc forall (m :: * -> *). GhcMonad m => m PrintUnqualified
GHC.getPrintUnqual
      forall (m :: * -> *) a.
MonadInterpreter m =>
(DynFlags -> m a) -> m a
withDynFlags forall a b. (a -> b) -> a -> b
$ \DynFlags
df ->
        -- TODO: get unit state from somewhere?
        forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ DynFlags -> UnitState -> PrintUnqualified -> SDoc -> String
GHC.showSDocForUser DynFlags
df UnitState
GHC.emptyUnitState PrintUnqualified
unqual (Type -> SDoc
GHC.pprTypeForUser Type
t)

kindToString :: MonadInterpreter m => GHC.Kind -> m String
kindToString :: forall (m :: * -> *). MonadInterpreter m => Type -> m String
kindToString Type
k
 = forall (m :: * -> *) a.
MonadInterpreter m =>
(DynFlags -> m a) -> m a
withDynFlags forall a b. (a -> b) -> a -> b
$ \DynFlags
df ->
     forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ DynFlags -> SDoc -> String
GHC.showSDoc DynFlags
df (Type -> SDoc
GHC.pprTypeForUser Type
k)

-- ---------------- Modules --------------------------

moduleToString :: GHC.Module -> String
moduleToString :: Module -> String
moduleToString = ModuleName -> String
GHC.moduleNameString forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall unit. GenModule unit -> ModuleName
GHC.moduleName

-- ---------------- Misc -----------------------------

isSucceeded :: GHC.SuccessFlag -> Bool
isSucceeded :: SuccessFlag -> Bool
isSucceeded SuccessFlag
GHC.Succeeded = Bool
True
isSucceeded SuccessFlag
GHC.Failed    = Bool
False