{-# LANGUAGE CPP #-}
module GHC.SourceGen.Pat
( Pat'
, wildP
, asP
, conP
, conP_
, recordConP
, strictP
, lazyP
, sigP
) where
import HsTypes
import HsPat hiding (LHsRecField')
import GHC.SourceGen.Name.Internal
import GHC.SourceGen.Pat.Internal
import GHC.SourceGen.Syntax.Internal
import GHC.SourceGen.Type.Internal (sigWcType)
wildP :: Pat'
wildP = noExtOrPlaceHolder WildPat
asP :: RdrNameStr -> Pat' -> Pat'
v `asP` p = noExt AsPat (valueRdrName v) $ builtPat $ parenthesize p
conP :: RdrNameStr -> [Pat'] -> Pat'
conP c xs = ConPatIn (valueRdrName c) $ PrefixCon
$ map (builtPat . parenthesize) xs
conP_ :: RdrNameStr -> Pat'
conP_ c = conP c []
recordConP :: RdrNameStr -> [(RdrNameStr, Pat')] -> Pat'
recordConP c fs
= ConPatIn (valueRdrName c)
$ RecCon $ HsRecFields (map mkRecField fs) Nothing
where
mkRecField :: (RdrNameStr, Pat') -> LHsRecField' LPat'
mkRecField (f, p) =
builtLoc $ HsRecField
{ hsRecFieldLbl =
builtLoc $ withPlaceHolder $ noExt FieldOcc $ valueRdrName f
, hsRecFieldArg = builtPat p
, hsRecPun = False
}
strictP :: Pat' -> Pat'
strictP = noExt BangPat . builtPat . parenthesize
lazyP :: Pat' -> Pat'
lazyP = noExt LazyPat . builtPat . parenthesize
sigP :: Pat' -> HsType' -> Pat'
#if MIN_VERSION_ghc(8,8,0)
sigP p t = noExt SigPat p (sigWcType t)
#elif MIN_VERSION_ghc(8,6,0)
sigP p t = SigPat (sigWcType t) (builtPat p)
#else
sigP p t = SigPatIn (builtPat p) (sigWcType t)
#endif