{-# LANGUAGE MultiParamTypeClasses , FlexibleInstances, FlexibleContexts #-}
module GHC.Util.Pat (
strToPat', patToStr'
, Brackets'(..)
, fromPChar', isPFieldWildcard', hasPFieldsDotDot', isPWildCard'
, isPFieldPun', isPatTypeSig', isPBangPat', isPViewPat'
) where
import HsSyn
import SrcLoc
import TysWiredIn
import FastString
import RdrName
import GHC.Util.Brackets
patToStr' :: Pat GhcPs -> String
patToStr' (LL _ (ConPatIn (L _ x) (PrefixCon []))) | x == true_RDR = "True"
patToStr' (LL _ (ConPatIn (L _ x) (PrefixCon []))) | x == false_RDR = "False"
patToStr' (LL _ (ConPatIn (L _ x) (PrefixCon []))) | x == nameRdrName nilDataConName = "[]"
patToStr' _ = ""
strToPat' :: String -> Pat GhcPs
strToPat' z
| z == "True" = ConPatIn (noLoc true_RDR) (PrefixCon [])
| z == "False" = ConPatIn (noLoc false_RDR) (PrefixCon [])
| z == "[]" = ConPatIn (noLoc $ nameRdrName nilDataConName) (PrefixCon [])
| otherwise = VarPat noExt (noLoc $ mkVarUnqual (fsLit z))
fromPChar' :: Pat GhcPs -> Maybe Char
fromPChar' (LL _ (LitPat _ (HsChar _ x))) = Just x
fromPChar' _ = Nothing
hasPFieldsDotDot' :: HsRecFields GhcPs (Pat GhcPs) -> Bool
hasPFieldsDotDot' HsRecFields {rec_dotdot=Just _} = True
hasPFieldsDotDot' _ = False
isPFieldWildcard' :: LHsRecField GhcPs (Pat GhcPs) -> Bool
isPFieldWildcard' (LL _ HsRecField {hsRecFieldArg=(LL _ (WildPat _))}) = True
isPFieldWildcard' (LL _ HsRecField {hsRecPun=True}) = True
isPFieldWildcard' (LL _ HsRecField {}) = False
isPFieldWildcard' _ = False
isPWildCard' :: Pat GhcPs -> Bool
isPWildCard' (LL _ (WildPat _)) = True
isPWildCard' _ = False
isPFieldPun' :: LHsRecField GhcPs (Pat GhcPs) -> Bool
isPFieldPun' (LL _ HsRecField {hsRecPun=True}) = True
isPFieldPun' _ = False
isPatTypeSig', isPBangPat', isPViewPat' :: Pat GhcPs -> Bool
isPatTypeSig' (LL _ SigPat{}) = True; isPatTypeSig' _ = False
isPBangPat' (LL _ BangPat{}) = True; isPBangPat' _ = False
isPViewPat' (LL _ ViewPat{}) = True; isPViewPat' _ = False