{-# LANGUAGE CPP #-}
module GHC.SourceGen.Type.Internal where
import GHC.Hs (GhcPs)
#if MIN_VERSION_ghc(9,0,0)
import GHC.Hs.Type as Types
import GHC.Types.SrcLoc (unLoc)
#else
import GHC.Hs.Type as Types
import SrcLoc (unLoc)
#endif
import GHC.SourceGen.Syntax.Internal
mkQTyVars :: [HsTyVarBndr'] -> LHsQTyVars'
mkQTyVars :: [HsTyVarBndr'] -> LHsQTyVars'
mkQTyVars [HsTyVarBndr']
vars = LHsQTyVars' -> LHsQTyVars'
forall a. a -> a
withPlaceHolder
(LHsQTyVars' -> LHsQTyVars') -> LHsQTyVars' -> LHsQTyVars'
forall a b. (a -> b) -> a -> b
$ (NoExtField
-> [GenLocated (SrcSpanAnn AnnListItem) HsTyVarBndr']
-> LHsQTyVars')
-> [GenLocated (SrcSpanAnn AnnListItem) HsTyVarBndr']
-> LHsQTyVars'
forall a. (NoExtField -> a) -> a
noExt ((NoExtField
-> [GenLocated (SrcSpanAnn AnnListItem) HsTyVarBndr']
-> LHsQTyVars')
-> NoExtField
-> [GenLocated (SrcSpanAnn AnnListItem) HsTyVarBndr']
-> LHsQTyVars'
forall a. a -> a
withPlaceHolder XHsQTvs GhcPs -> [LHsTyVarBndr () GhcPs] -> LHsQTyVars'
NoExtField
-> [GenLocated (SrcSpanAnn AnnListItem) HsTyVarBndr']
-> LHsQTyVars'
forall pass.
XHsQTvs pass -> [LHsTyVarBndr () pass] -> LHsQTyVars pass
HsQTvs)
([GenLocated (SrcSpanAnn AnnListItem) HsTyVarBndr'] -> LHsQTyVars')
-> [GenLocated (SrcSpanAnn AnnListItem) HsTyVarBndr']
-> LHsQTyVars'
forall a b. (a -> b) -> a -> b
$ (HsTyVarBndr' -> GenLocated (SrcSpanAnn AnnListItem) HsTyVarBndr')
-> [HsTyVarBndr']
-> [GenLocated (SrcSpanAnn AnnListItem) HsTyVarBndr']
forall a b. (a -> b) -> [a] -> [b]
map HsTyVarBndr' -> GenLocated (SrcSpanAnn AnnListItem) HsTyVarBndr'
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated [HsTyVarBndr']
vars
sigType :: HsType' -> LHsSigType'
#if MIN_VERSION_ghc(9,2,0)
sigType :: HsType' -> LHsSigType'
sigType = HsSigType GhcPs
-> GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated (HsSigType GhcPs
-> GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs))
-> (HsType' -> HsSigType GhcPs)
-> HsType'
-> GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (NoExtField
-> HsOuterSigTyVarBndrs GhcPs
-> GenLocated (SrcSpanAnn AnnListItem) HsType'
-> HsSigType GhcPs)
-> HsOuterSigTyVarBndrs GhcPs
-> GenLocated (SrcSpanAnn AnnListItem) HsType'
-> HsSigType GhcPs
forall a. (NoExtField -> a) -> a
noExt XHsSig GhcPs
-> HsOuterSigTyVarBndrs GhcPs -> LHsType GhcPs -> HsSigType GhcPs
NoExtField
-> HsOuterSigTyVarBndrs GhcPs
-> GenLocated (SrcSpanAnn AnnListItem) HsType'
-> HsSigType GhcPs
forall pass.
XHsSig pass
-> HsOuterSigTyVarBndrs pass -> LHsType pass -> HsSigType pass
HsSig ((NoExtField -> HsOuterSigTyVarBndrs GhcPs)
-> HsOuterSigTyVarBndrs GhcPs
forall a. (NoExtField -> a) -> a
noExt XHsOuterImplicit GhcPs -> HsOuterSigTyVarBndrs GhcPs
NoExtField -> HsOuterSigTyVarBndrs GhcPs
forall flag pass.
XHsOuterImplicit pass -> HsOuterTyVarBndrs flag pass
HsOuterImplicit) (GenLocated (SrcSpanAnn AnnListItem) HsType' -> HsSigType GhcPs)
-> (HsType' -> GenLocated (SrcSpanAnn AnnListItem) HsType')
-> HsType'
-> HsSigType GhcPs
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HsType' -> GenLocated (SrcSpanAnn AnnListItem) HsType'
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated
#else
sigType = withPlaceHolder . noExt (withPlaceHolder Types.HsIB) . builtLoc
#endif
parenthesizeTypeForApp, parenthesizeTypeForOp, parenthesizeTypeForFun
:: LHsType GhcPs -> LHsType GhcPs
parenthesizeTypeForApp :: LHsType GhcPs -> LHsType GhcPs
parenthesizeTypeForApp LHsType GhcPs
t
| HsType' -> Bool
needsParenForApp (GenLocated (SrcSpanAnn AnnListItem) HsType' -> HsType'
forall l e. GenLocated l e -> e
unLoc LHsType GhcPs
GenLocated (SrcSpanAnn AnnListItem) HsType'
t) = LHsType GhcPs -> LHsType GhcPs
parTy LHsType GhcPs
t
| Bool
otherwise = LHsType GhcPs
t
parenthesizeTypeForOp :: LHsType GhcPs -> LHsType GhcPs
parenthesizeTypeForOp LHsType GhcPs
t
| HsType' -> Bool
needsParenForOp (GenLocated (SrcSpanAnn AnnListItem) HsType' -> HsType'
forall l e. GenLocated l e -> e
unLoc LHsType GhcPs
GenLocated (SrcSpanAnn AnnListItem) HsType'
t) = LHsType GhcPs -> LHsType GhcPs
parTy LHsType GhcPs
t
| Bool
otherwise = LHsType GhcPs
t
parenthesizeTypeForFun :: LHsType GhcPs -> LHsType GhcPs
parenthesizeTypeForFun LHsType GhcPs
t
| HsType' -> Bool
needsParenForFun (GenLocated (SrcSpanAnn AnnListItem) HsType' -> HsType'
forall l e. GenLocated l e -> e
unLoc LHsType GhcPs
GenLocated (SrcSpanAnn AnnListItem) HsType'
t) = LHsType GhcPs -> LHsType GhcPs
parTy LHsType GhcPs
t
| Bool
otherwise = LHsType GhcPs
t
needsParenForFun, needsParenForOp, needsParenForApp
:: HsType' -> Bool
needsParenForFun :: HsType' -> Bool
needsParenForFun HsType'
t = case HsType'
t of
HsForAllTy{} -> Bool
True
HsQualTy{} -> Bool
True
HsFunTy{} -> Bool
True
HsType'
_ -> Bool
False
needsParenForOp :: HsType' -> Bool
needsParenForOp HsType'
t = case HsType'
t of
HsOpTy{} -> Bool
True
HsType'
_ -> HsType' -> Bool
needsParenForFun HsType'
t
needsParenForApp :: HsType' -> Bool
needsParenForApp HsType'
t = case HsType'
t of
HsAppTy {} -> Bool
True
HsType'
_ -> HsType' -> Bool
needsParenForOp HsType'
t
parTy :: LHsType GhcPs -> LHsType GhcPs
parTy :: LHsType GhcPs -> LHsType GhcPs
parTy = HsType' -> GenLocated (SrcSpanAnn AnnListItem) HsType'
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated (HsType' -> GenLocated (SrcSpanAnn AnnListItem) HsType')
-> (GenLocated (SrcSpanAnn AnnListItem) HsType' -> HsType')
-> GenLocated (SrcSpanAnn AnnListItem) HsType'
-> GenLocated (SrcSpanAnn AnnListItem) HsType'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (EpAnn AnnParen
-> GenLocated (SrcSpanAnn AnnListItem) HsType' -> HsType')
-> GenLocated (SrcSpanAnn AnnListItem) HsType' -> HsType'
forall ann a. (EpAnn ann -> a) -> a
withEpAnnNotUsed XParTy GhcPs -> LHsType GhcPs -> HsType'
EpAnn AnnParen
-> GenLocated (SrcSpanAnn AnnListItem) HsType' -> HsType'
forall pass. XParTy pass -> LHsType pass -> HsType pass
HsParTy
sigWcType :: HsType' -> LHsSigWcType'
sigWcType :: HsType' -> LHsSigWcType'
sigWcType = (NoExtField
-> GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)))
-> GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs))
forall a. (NoExtField -> a) -> a
noExt ((NoExtField
-> GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)))
-> NoExtField
-> GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs))
forall a. a -> a
withPlaceHolder XHsWC GhcPs (GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs))
-> GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs))
NoExtField
-> GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs))
forall pass thing.
XHsWC pass thing -> thing -> HsWildCardBndrs pass thing
Types.HsWC) (GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)))
-> (HsType'
-> GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs))
-> HsType'
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HsType' -> LHsSigType'
HsType' -> GenLocated (SrcSpanAnn AnnListItem) (HsSigType GhcPs)
sigType
wcType :: HsType' -> LHsWcType'
wcType :: HsType' -> LHsWcType'
wcType = (NoExtField
-> GenLocated (SrcSpanAnn AnnListItem) HsType'
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) HsType'))
-> GenLocated (SrcSpanAnn AnnListItem) HsType'
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) HsType')
forall a. (NoExtField -> a) -> a
noExt ((NoExtField
-> GenLocated (SrcSpanAnn AnnListItem) HsType'
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) HsType'))
-> NoExtField
-> GenLocated (SrcSpanAnn AnnListItem) HsType'
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) HsType')
forall a. a -> a
withPlaceHolder XHsWC GhcPs (GenLocated (SrcSpanAnn AnnListItem) HsType')
-> GenLocated (SrcSpanAnn AnnListItem) HsType'
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) HsType')
NoExtField
-> GenLocated (SrcSpanAnn AnnListItem) HsType'
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) HsType')
forall pass thing.
XHsWC pass thing -> thing -> HsWildCardBndrs pass thing
Types.HsWC) (GenLocated (SrcSpanAnn AnnListItem) HsType'
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) HsType'))
-> (HsType' -> GenLocated (SrcSpanAnn AnnListItem) HsType')
-> HsType'
-> HsWildCardBndrs
GhcPs (GenLocated (SrcSpanAnn AnnListItem) HsType')
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HsType' -> GenLocated (SrcSpanAnn AnnListItem) HsType'
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated
patSigType :: HsType' -> HsPatSigType'
#if MIN_VERSION_ghc(9,2,0)
patSigType :: HsType' -> HsPatSigType'
patSigType = (EpAnn NoEpAnns
-> GenLocated (SrcSpanAnn AnnListItem) HsType' -> HsPatSigType')
-> GenLocated (SrcSpanAnn AnnListItem) HsType' -> HsPatSigType'
forall ann a. (EpAnn ann -> a) -> a
withEpAnnNotUsed EpAnn NoEpAnns -> LHsType GhcPs -> HsPatSigType'
EpAnn NoEpAnns
-> GenLocated (SrcSpanAnn AnnListItem) HsType' -> HsPatSigType'
mkHsPatSigType (GenLocated (SrcSpanAnn AnnListItem) HsType' -> HsPatSigType')
-> (HsType' -> GenLocated (SrcSpanAnn AnnListItem) HsType')
-> HsType'
-> HsPatSigType'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HsType' -> GenLocated (SrcSpanAnn AnnListItem) HsType'
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated
#elif MIN_VERSION_ghc(9,0,0)
patSigType = mkHsPatSigType . builtLoc
#else
patSigType = sigWcType
#endif