typelet-0.1.0.0: src/TypeLet/Plugin/NameResolution.hs
module TypeLet.Plugin.NameResolution (
ResolvedNames(..)
, resolveNames
) where
import TypeLet.Plugin.GhcTcPluginAPI
data ResolvedNames = ResolvedNames {
clsEqual :: Class
, clsLet :: Class
}
instance Outputable ResolvedNames where
ppr ResolvedNames{..} = vcat [
text "ResolvedNames {"
, nest 2 $ vcat [
text "clsEqual =" <+> ppr clsEqual
, text "clsLet =" <+> ppr clsLet
]
, text "}"
]
resolveNames :: TcPluginM 'Init ResolvedNames
resolveNames = do
m <- do r <- findImportedModule typeletMod (Just typeletPkg)
case r of
Found _ m -> return m
_otherwise -> panic $ "Could not find "
++ showSDocUnsafe (ppr typeletMod)
-- Constraints handled by the plugin
clsEqual <- tcLookupClass =<< lookupOrig m (mkTcOcc "Equal")
clsLet <- tcLookupClass =<< lookupOrig m (mkTcOcc "Let")
return ResolvedNames{..}
where
typeletMod :: ModuleName
typeletMod = mkModuleName "TypeLet.UserAPI"
typeletPkg :: FastString
typeletPkg = fsLit "typelet"