{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ViewPatterns #-}
module GHC.Hs.Type (
Mult, HsScaled(..),
hsMult, hsScaledThing,
HsArrow(..), arrowToHsType,
hsLinear, hsUnrestricted, isUnrestricted,
HsType(..), NewHsTypeX(..), LHsType, HsKind, LHsKind,
HsForAllTelescope(..), HsTyVarBndr(..), LHsTyVarBndr,
LHsQTyVars(..),
HsImplicitBndrs(..),
HsWildCardBndrs(..),
HsPatSigType(..), HsPSRn(..),
LHsSigType, LHsSigWcType, LHsWcType,
HsTupleSort(..),
HsContext, LHsContext, noLHsContext,
HsTyLit(..),
HsIPName(..), hsIPNameFS,
HsArg(..), numVisibleArgs,
LHsTypeArg, lhsTypeArgSrcSpan,
OutputableBndrFlag,
LBangType, BangType,
HsSrcBang(..), HsImplBang(..),
SrcStrictness(..), SrcUnpackedness(..),
getBangType, getBangStrictness,
ConDeclField(..), LConDeclField, pprConDeclFields,
HsConDetails(..),
FieldOcc(..), LFieldOcc, mkFieldOcc,
AmbiguousFieldOcc(..), mkAmbiguousFieldOcc,
rdrNameAmbiguousFieldOcc, selectorAmbiguousFieldOcc,
unambiguousFieldOcc, ambiguousFieldOcc,
mkAnonWildCardTy, pprAnonWildCard,
mkHsImplicitBndrs, mkHsWildCardBndrs, mkHsPatSigType, hsImplicitBody,
mkEmptyImplicitBndrs, mkEmptyWildCardBndrs,
mkHsForAllVisTele, mkHsForAllInvisTele,
mkHsQTvs, hsQTvExplicit, emptyLHsQTvs,
isHsKindedTyVar, hsTvbAllKinded, isLHsForAllTy,
hsScopedTvs, hsWcScopedTvs, dropWildCards,
hsTyVarName, hsAllLTyVarNames, hsLTyVarLocNames,
hsLTyVarName, hsLTyVarNames, hsLTyVarLocName, hsExplicitLTyVarNames,
splitLHsInstDeclTy, getLHsInstDeclHead, getLHsInstDeclClass_maybe,
splitLHsPatSynTy,
splitLHsForAllTyInvis, splitLHsForAllTyInvis_KP, splitLHsQualTy,
splitLHsSigmaTyInvis, splitLHsGadtTy,
splitHsFunType, hsTyGetAppHead_maybe,
mkHsOpTy, mkHsAppTy, mkHsAppTys, mkHsAppKindTy,
ignoreParens, hsSigType, hsSigWcType, hsPatSigType,
hsTyKindSig,
hsConDetailsArgs,
setHsTyVarBndrFlag, hsTyVarBndrFlag,
pprHsType, pprHsForAll, pprHsExplicitForAll,
pprLHsContext,
hsTypeNeedsParens, parenthesizeHsType, parenthesizeHsContext
) where
#include "HsVersions.h"
import GHC.Prelude
import {-# SOURCE #-} GHC.Hs.Expr ( HsSplice, pprSplice )
import GHC.Hs.Extension
import GHC.Types.Id ( Id )
import GHC.Types.Name( Name, NamedThing(getName) )
import GHC.Types.Name.Reader ( RdrName )
import GHC.Core.DataCon( HsSrcBang(..), HsImplBang(..),
SrcStrictness(..), SrcUnpackedness(..) )
import GHC.Core.TyCo.Rep ( Type(..) )
import GHC.Builtin.Types( manyDataConName, oneDataConName, mkTupleStr )
import GHC.Core.Type
import GHC.Hs.Doc
import GHC.Types.Basic
import GHC.Types.SrcLoc
import GHC.Utils.Outputable
import GHC.Data.FastString
import GHC.Utils.Misc ( count )
import Data.Data hiding ( Fixity, Prefix, Infix )
import Data.Maybe
import GHC.Parser.Annotation
type LBangType pass = Located (BangType pass)
type BangType pass = HsType pass
getBangType :: LHsType a -> LHsType a
getBangType :: forall a. LHsType a -> LHsType a
getBangType (L SrcSpan
_ (HsBangTy XBangTy a
_ HsSrcBang
_ GenLocated SrcSpan (HsType a)
lty)) = GenLocated SrcSpan (HsType a)
lty
getBangType (L SrcSpan
_ (HsDocTy XDocTy a
x (L SrcSpan
_ (HsBangTy XBangTy a
_ HsSrcBang
_ GenLocated SrcSpan (HsType a)
lty)) LHsDocString
lds)) =
GenLocated SrcSpan (HsType a)
-> LHsDocString -> HsType a -> GenLocated SrcSpan (HsType a)
forall a b c. Located a -> Located b -> c -> Located c
addCLoc GenLocated SrcSpan (HsType a)
lty LHsDocString
lds (XDocTy a
-> GenLocated SrcSpan (HsType a) -> LHsDocString -> HsType a
forall pass.
XDocTy pass -> LHsType pass -> LHsDocString -> HsType pass
HsDocTy XDocTy a
x GenLocated SrcSpan (HsType a)
lty LHsDocString
lds)
getBangType GenLocated SrcSpan (HsType a)
lty = GenLocated SrcSpan (HsType a)
lty
getBangStrictness :: LHsType a -> HsSrcBang
getBangStrictness :: forall a. LHsType a -> HsSrcBang
getBangStrictness (L SrcSpan
_ (HsBangTy XBangTy a
_ HsSrcBang
s GenLocated SrcSpan (HsType a)
_)) = HsSrcBang
s
getBangStrictness (L SrcSpan
_ (HsDocTy XDocTy a
_ (L SrcSpan
_ (HsBangTy XBangTy a
_ HsSrcBang
s GenLocated SrcSpan (HsType a)
_)) LHsDocString
_)) = HsSrcBang
s
getBangStrictness GenLocated SrcSpan (HsType a)
_ = (SourceText -> SrcUnpackedness -> SrcStrictness -> HsSrcBang
HsSrcBang SourceText
NoSourceText SrcUnpackedness
NoSrcUnpack SrcStrictness
NoSrcStrict)
type LHsContext pass = Located (HsContext pass)
noLHsContext :: LHsContext pass
noLHsContext :: forall pass. LHsContext pass
noLHsContext = [LHsType pass] -> Located [LHsType pass]
forall e. e -> Located e
noLoc []
type HsContext pass = [LHsType pass]
type LHsType pass = Located (HsType pass)
type HsKind pass = HsType pass
type LHsKind pass = Located (HsKind pass)
data HsForAllTelescope pass
= HsForAllVis
{ forall pass. HsForAllTelescope pass -> XHsForAllVis pass
hsf_xvis :: XHsForAllVis pass
, forall pass. HsForAllTelescope pass -> [LHsTyVarBndr () pass]
hsf_vis_bndrs :: [LHsTyVarBndr () pass]
}
| HsForAllInvis
{ forall pass. HsForAllTelescope pass -> XHsForAllInvis pass
hsf_xinvis :: XHsForAllInvis pass
, forall pass.
HsForAllTelescope pass -> [LHsTyVarBndr Specificity pass]
hsf_invis_bndrs :: [LHsTyVarBndr Specificity pass]
}
| XHsForAllTelescope !(XXHsForAllTelescope pass)
type instance XHsForAllVis (GhcPass _) = NoExtField
type instance XHsForAllInvis (GhcPass _) = NoExtField
type instance XXHsForAllTelescope (GhcPass _) = NoExtCon
type LHsTyVarBndr flag pass = Located (HsTyVarBndr flag pass)
data LHsQTyVars pass
= HsQTvs { forall pass. LHsQTyVars pass -> XHsQTvs pass
hsq_ext :: XHsQTvs pass
, forall pass. LHsQTyVars pass -> [LHsTyVarBndr () pass]
hsq_explicit :: [LHsTyVarBndr () pass]
}
| XLHsQTyVars !(XXLHsQTyVars pass)
type HsQTvsRn = [Name]
type instance XHsQTvs GhcPs = NoExtField
type instance XHsQTvs GhcRn = HsQTvsRn
type instance XHsQTvs GhcTc = HsQTvsRn
type instance XXLHsQTyVars (GhcPass _) = NoExtCon
mkHsForAllVisTele ::
[LHsTyVarBndr () (GhcPass p)] -> HsForAllTelescope (GhcPass p)
mkHsForAllVisTele :: forall (p :: Pass).
[LHsTyVarBndr () (GhcPass p)] -> HsForAllTelescope (GhcPass p)
mkHsForAllVisTele [LHsTyVarBndr () (GhcPass p)]
vis_bndrs =
HsForAllVis :: forall pass.
XHsForAllVis pass
-> [LHsTyVarBndr () pass] -> HsForAllTelescope pass
HsForAllVis { hsf_xvis :: XHsForAllVis (GhcPass p)
hsf_xvis = NoExtField
XHsForAllVis (GhcPass p)
noExtField, hsf_vis_bndrs :: [LHsTyVarBndr () (GhcPass p)]
hsf_vis_bndrs = [LHsTyVarBndr () (GhcPass p)]
vis_bndrs }
mkHsForAllInvisTele ::
[LHsTyVarBndr Specificity (GhcPass p)] -> HsForAllTelescope (GhcPass p)
mkHsForAllInvisTele :: forall (p :: Pass).
[LHsTyVarBndr Specificity (GhcPass p)]
-> HsForAllTelescope (GhcPass p)
mkHsForAllInvisTele [LHsTyVarBndr Specificity (GhcPass p)]
invis_bndrs =
HsForAllInvis :: forall pass.
XHsForAllInvis pass
-> [LHsTyVarBndr Specificity pass] -> HsForAllTelescope pass
HsForAllInvis { hsf_xinvis :: XHsForAllInvis (GhcPass p)
hsf_xinvis = NoExtField
XHsForAllInvis (GhcPass p)
noExtField, hsf_invis_bndrs :: [LHsTyVarBndr Specificity (GhcPass p)]
hsf_invis_bndrs = [LHsTyVarBndr Specificity (GhcPass p)]
invis_bndrs }
mkHsQTvs :: [LHsTyVarBndr () GhcPs] -> LHsQTyVars GhcPs
mkHsQTvs :: [LHsTyVarBndr () GhcPs] -> LHsQTyVars GhcPs
mkHsQTvs [LHsTyVarBndr () GhcPs]
tvs = HsQTvs :: forall pass.
XHsQTvs pass -> [LHsTyVarBndr () pass] -> LHsQTyVars pass
HsQTvs { hsq_ext :: XHsQTvs GhcPs
hsq_ext = NoExtField
XHsQTvs GhcPs
noExtField, hsq_explicit :: [LHsTyVarBndr () GhcPs]
hsq_explicit = [LHsTyVarBndr () GhcPs]
tvs }
hsQTvExplicit :: LHsQTyVars pass -> [LHsTyVarBndr () pass]
hsQTvExplicit :: forall pass. LHsQTyVars pass -> [LHsTyVarBndr () pass]
hsQTvExplicit = LHsQTyVars pass -> [LHsTyVarBndr () pass]
forall pass. LHsQTyVars pass -> [LHsTyVarBndr () pass]
hsq_explicit
emptyLHsQTvs :: LHsQTyVars GhcRn
emptyLHsQTvs :: LHsQTyVars GhcRn
emptyLHsQTvs = HsQTvs :: forall pass.
XHsQTvs pass -> [LHsTyVarBndr () pass] -> LHsQTyVars pass
HsQTvs { hsq_ext :: XHsQTvs GhcRn
hsq_ext = [], hsq_explicit :: [LHsTyVarBndr () GhcRn]
hsq_explicit = [] }
data HsImplicitBndrs pass thing
= HsIB { forall pass thing. HsImplicitBndrs pass thing -> XHsIB pass thing
hsib_ext :: XHsIB pass thing
, forall pass thing. HsImplicitBndrs pass thing -> thing
hsib_body :: thing
}
| XHsImplicitBndrs !(XXHsImplicitBndrs pass thing)
type instance XHsIB GhcPs _ = NoExtField
type instance XHsIB GhcRn _ = [Name]
type instance XHsIB GhcTc _ = [Name]
type instance XXHsImplicitBndrs (GhcPass _) _ = NoExtCon
data HsWildCardBndrs pass thing
= HsWC { forall pass thing. HsWildCardBndrs pass thing -> XHsWC pass thing
hswc_ext :: XHsWC pass thing
, forall pass thing. HsWildCardBndrs pass thing -> thing
hswc_body :: thing
}
| XHsWildCardBndrs !(XXHsWildCardBndrs pass thing)
type instance XHsWC GhcPs b = NoExtField
type instance XHsWC GhcRn b = [Name]
type instance XHsWC GhcTc b = [Name]
type instance XXHsWildCardBndrs (GhcPass _) b = NoExtCon
data HsPatSigType pass
= HsPS { forall pass. HsPatSigType pass -> XHsPS pass
hsps_ext :: XHsPS pass
, forall pass. HsPatSigType pass -> LHsType pass
hsps_body :: LHsType pass
}
| XHsPatSigType !(XXHsPatSigType pass)
data HsPSRn = HsPSRn
{ HsPSRn -> [Name]
hsps_nwcs :: [Name]
, HsPSRn -> [Name]
hsps_imp_tvs :: [Name]
}
deriving Typeable HsPSRn
Typeable HsPSRn
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsPSRn -> c HsPSRn)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsPSRn)
-> (HsPSRn -> Constr)
-> (HsPSRn -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsPSRn))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsPSRn))
-> ((forall b. Data b => b -> b) -> HsPSRn -> HsPSRn)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsPSRn -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsPSRn -> r)
-> (forall u. (forall d. Data d => d -> u) -> HsPSRn -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> HsPSRn -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsPSRn -> m HsPSRn)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsPSRn -> m HsPSRn)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsPSRn -> m HsPSRn)
-> Data HsPSRn
HsPSRn -> DataType
HsPSRn -> Constr
(forall b. Data b => b -> b) -> HsPSRn -> HsPSRn
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> HsPSRn -> u
forall u. (forall d. Data d => d -> u) -> HsPSRn -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> HsPSRn -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> HsPSRn -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsPSRn -> m HsPSRn
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsPSRn -> m HsPSRn
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsPSRn
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsPSRn -> c HsPSRn
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsPSRn)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsPSRn)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsPSRn -> m HsPSRn
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsPSRn -> m HsPSRn
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsPSRn -> m HsPSRn
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsPSRn -> m HsPSRn
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsPSRn -> m HsPSRn
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsPSRn -> m HsPSRn
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> HsPSRn -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> HsPSRn -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> HsPSRn -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> HsPSRn -> [u]
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> HsPSRn -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> HsPSRn -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> HsPSRn -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> HsPSRn -> r
gmapT :: (forall b. Data b => b -> b) -> HsPSRn -> HsPSRn
$cgmapT :: (forall b. Data b => b -> b) -> HsPSRn -> HsPSRn
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsPSRn)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsPSRn)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsPSRn)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsPSRn)
dataTypeOf :: HsPSRn -> DataType
$cdataTypeOf :: HsPSRn -> DataType
toConstr :: HsPSRn -> Constr
$ctoConstr :: HsPSRn -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsPSRn
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsPSRn
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsPSRn -> c HsPSRn
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsPSRn -> c HsPSRn
Data
type instance XHsPS GhcPs = NoExtField
type instance XHsPS GhcRn = HsPSRn
type instance XHsPS GhcTc = HsPSRn
type instance XXHsPatSigType (GhcPass _) = NoExtCon
type LHsSigType pass = HsImplicitBndrs pass (LHsType pass)
type LHsWcType pass = HsWildCardBndrs pass (LHsType pass)
type LHsSigWcType pass = HsWildCardBndrs pass (LHsSigType pass)
hsImplicitBody :: HsImplicitBndrs (GhcPass p) thing -> thing
hsImplicitBody :: forall (p :: Pass) thing.
HsImplicitBndrs (GhcPass p) thing -> thing
hsImplicitBody (HsIB { hsib_body :: forall pass thing. HsImplicitBndrs pass thing -> thing
hsib_body = thing
body }) = thing
body
hsSigType :: LHsSigType (GhcPass p) -> LHsType (GhcPass p)
hsSigType :: forall (p :: Pass). LHsSigType (GhcPass p) -> LHsType (GhcPass p)
hsSigType = HsImplicitBndrs (GhcPass p) (LHsType (GhcPass p))
-> LHsType (GhcPass p)
forall (p :: Pass) thing.
HsImplicitBndrs (GhcPass p) thing -> thing
hsImplicitBody
hsSigWcType :: LHsSigWcType pass -> LHsType pass
hsSigWcType :: forall pass. LHsSigWcType pass -> LHsType pass
hsSigWcType LHsSigWcType pass
sig_ty = HsImplicitBndrs pass (LHsType pass) -> LHsType pass
forall pass thing. HsImplicitBndrs pass thing -> thing
hsib_body (LHsSigWcType pass -> HsImplicitBndrs pass (LHsType pass)
forall pass thing. HsWildCardBndrs pass thing -> thing
hswc_body LHsSigWcType pass
sig_ty)
hsPatSigType :: HsPatSigType pass -> LHsType pass
hsPatSigType :: forall pass. HsPatSigType pass -> LHsType pass
hsPatSigType = HsPatSigType pass -> LHsType pass
forall pass. HsPatSigType pass -> LHsType pass
hsps_body
dropWildCards :: LHsSigWcType pass -> LHsSigType pass
dropWildCards :: forall pass. LHsSigWcType pass -> LHsSigType pass
dropWildCards LHsSigWcType pass
sig_ty = LHsSigWcType pass -> LHsSigType pass
forall pass thing. HsWildCardBndrs pass thing -> thing
hswc_body LHsSigWcType pass
sig_ty
mkHsImplicitBndrs :: thing -> HsImplicitBndrs GhcPs thing
mkHsImplicitBndrs :: forall thing. thing -> HsImplicitBndrs GhcPs thing
mkHsImplicitBndrs thing
x = HsIB :: forall pass thing.
XHsIB pass thing -> thing -> HsImplicitBndrs pass thing
HsIB { hsib_ext :: XHsIB GhcPs thing
hsib_ext = NoExtField
XHsIB GhcPs thing
noExtField
, hsib_body :: thing
hsib_body = thing
x }
mkHsWildCardBndrs :: thing -> HsWildCardBndrs GhcPs thing
mkHsWildCardBndrs :: forall thing. thing -> HsWildCardBndrs GhcPs thing
mkHsWildCardBndrs thing
x = HsWC :: forall pass thing.
XHsWC pass thing -> thing -> HsWildCardBndrs pass thing
HsWC { hswc_body :: thing
hswc_body = thing
x
, hswc_ext :: XHsWC GhcPs thing
hswc_ext = NoExtField
XHsWC GhcPs thing
noExtField }
mkHsPatSigType :: LHsType GhcPs -> HsPatSigType GhcPs
mkHsPatSigType :: LHsType GhcPs -> HsPatSigType GhcPs
mkHsPatSigType LHsType GhcPs
x = HsPS :: forall pass. XHsPS pass -> LHsType pass -> HsPatSigType pass
HsPS { hsps_ext :: XHsPS GhcPs
hsps_ext = NoExtField
XHsPS GhcPs
noExtField
, hsps_body :: LHsType GhcPs
hsps_body = LHsType GhcPs
x }
mkEmptyImplicitBndrs :: thing -> HsImplicitBndrs GhcRn thing
mkEmptyImplicitBndrs :: forall thing. thing -> HsImplicitBndrs GhcRn thing
mkEmptyImplicitBndrs thing
x = HsIB :: forall pass thing.
XHsIB pass thing -> thing -> HsImplicitBndrs pass thing
HsIB { hsib_ext :: XHsIB GhcRn thing
hsib_ext = []
, hsib_body :: thing
hsib_body = thing
x }
mkEmptyWildCardBndrs :: thing -> HsWildCardBndrs GhcRn thing
mkEmptyWildCardBndrs :: forall thing. thing -> HsWildCardBndrs GhcRn thing
mkEmptyWildCardBndrs thing
x = HsWC :: forall pass thing.
XHsWC pass thing -> thing -> HsWildCardBndrs pass thing
HsWC { hswc_body :: thing
hswc_body = thing
x
, hswc_ext :: XHsWC GhcRn thing
hswc_ext = [] }
newtype HsIPName = HsIPName FastString
deriving( HsIPName -> HsIPName -> Bool
(HsIPName -> HsIPName -> Bool)
-> (HsIPName -> HsIPName -> Bool) -> Eq HsIPName
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: HsIPName -> HsIPName -> Bool
$c/= :: HsIPName -> HsIPName -> Bool
== :: HsIPName -> HsIPName -> Bool
$c== :: HsIPName -> HsIPName -> Bool
Eq, Typeable HsIPName
Typeable HsIPName
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsIPName -> c HsIPName)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsIPName)
-> (HsIPName -> Constr)
-> (HsIPName -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsIPName))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsIPName))
-> ((forall b. Data b => b -> b) -> HsIPName -> HsIPName)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsIPName -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsIPName -> r)
-> (forall u. (forall d. Data d => d -> u) -> HsIPName -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> HsIPName -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsIPName -> m HsIPName)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsIPName -> m HsIPName)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsIPName -> m HsIPName)
-> Data HsIPName
HsIPName -> DataType
HsIPName -> Constr
(forall b. Data b => b -> b) -> HsIPName -> HsIPName
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> HsIPName -> u
forall u. (forall d. Data d => d -> u) -> HsIPName -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsIPName -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsIPName -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsIPName -> m HsIPName
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsIPName -> m HsIPName
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsIPName
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsIPName -> c HsIPName
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsIPName)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsIPName)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsIPName -> m HsIPName
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsIPName -> m HsIPName
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsIPName -> m HsIPName
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsIPName -> m HsIPName
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsIPName -> m HsIPName
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsIPName -> m HsIPName
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> HsIPName -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> HsIPName -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> HsIPName -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> HsIPName -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsIPName -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsIPName -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsIPName -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsIPName -> r
gmapT :: (forall b. Data b => b -> b) -> HsIPName -> HsIPName
$cgmapT :: (forall b. Data b => b -> b) -> HsIPName -> HsIPName
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsIPName)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsIPName)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsIPName)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsIPName)
dataTypeOf :: HsIPName -> DataType
$cdataTypeOf :: HsIPName -> DataType
toConstr :: HsIPName -> Constr
$ctoConstr :: HsIPName -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsIPName
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsIPName
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsIPName -> c HsIPName
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsIPName -> c HsIPName
Data )
hsIPNameFS :: HsIPName -> FastString
hsIPNameFS :: HsIPName -> FastString
hsIPNameFS (HsIPName FastString
n) = FastString
n
instance Outputable HsIPName where
ppr :: HsIPName -> SDoc
ppr (HsIPName FastString
n) = Char -> SDoc
char Char
'?' SDoc -> SDoc -> SDoc
<> FastString -> SDoc
ftext FastString
n
instance OutputableBndr HsIPName where
pprBndr :: BindingSite -> HsIPName -> SDoc
pprBndr BindingSite
_ HsIPName
n = HsIPName -> SDoc
forall a. Outputable a => a -> SDoc
ppr HsIPName
n
pprInfixOcc :: HsIPName -> SDoc
pprInfixOcc HsIPName
n = HsIPName -> SDoc
forall a. Outputable a => a -> SDoc
ppr HsIPName
n
pprPrefixOcc :: HsIPName -> SDoc
pprPrefixOcc HsIPName
n = HsIPName -> SDoc
forall a. Outputable a => a -> SDoc
ppr HsIPName
n
data HsTyVarBndr flag pass
= UserTyVar
(XUserTyVar pass)
flag
(Located (IdP pass))
| KindedTyVar
(XKindedTyVar pass)
flag
(Located (IdP pass))
(LHsKind pass)
| XTyVarBndr
!(XXTyVarBndr pass)
type instance XUserTyVar (GhcPass _) = NoExtField
type instance XKindedTyVar (GhcPass _) = NoExtField
type instance XXTyVarBndr (GhcPass _) = NoExtCon
hsTyVarBndrFlag :: HsTyVarBndr flag (GhcPass pass) -> flag
hsTyVarBndrFlag :: forall flag (pass :: Pass). HsTyVarBndr flag (GhcPass pass) -> flag
hsTyVarBndrFlag (UserTyVar XUserTyVar (GhcPass pass)
_ flag
fl Located (IdP (GhcPass pass))
_) = flag
fl
hsTyVarBndrFlag (KindedTyVar XKindedTyVar (GhcPass pass)
_ flag
fl Located (IdP (GhcPass pass))
_ LHsKind (GhcPass pass)
_) = flag
fl
setHsTyVarBndrFlag :: flag -> HsTyVarBndr flag' (GhcPass pass)
-> HsTyVarBndr flag (GhcPass pass)
setHsTyVarBndrFlag :: forall flag flag' (pass :: Pass).
flag
-> HsTyVarBndr flag' (GhcPass pass)
-> HsTyVarBndr flag (GhcPass pass)
setHsTyVarBndrFlag flag
f (UserTyVar XUserTyVar (GhcPass pass)
x flag'
_ Located (IdP (GhcPass pass))
l) = XUserTyVar (GhcPass pass)
-> flag
-> Located (IdP (GhcPass pass))
-> HsTyVarBndr flag (GhcPass pass)
forall flag pass.
XUserTyVar pass
-> flag -> Located (IdP pass) -> HsTyVarBndr flag pass
UserTyVar XUserTyVar (GhcPass pass)
x flag
f Located (IdP (GhcPass pass))
l
setHsTyVarBndrFlag flag
f (KindedTyVar XKindedTyVar (GhcPass pass)
x flag'
_ Located (IdP (GhcPass pass))
l LHsKind (GhcPass pass)
k) = XKindedTyVar (GhcPass pass)
-> flag
-> Located (IdP (GhcPass pass))
-> LHsKind (GhcPass pass)
-> HsTyVarBndr flag (GhcPass pass)
forall flag pass.
XKindedTyVar pass
-> flag
-> Located (IdP pass)
-> LHsKind pass
-> HsTyVarBndr flag pass
KindedTyVar XKindedTyVar (GhcPass pass)
x flag
f Located (IdP (GhcPass pass))
l LHsKind (GhcPass pass)
k
isHsKindedTyVar :: HsTyVarBndr flag pass -> Bool
isHsKindedTyVar :: forall flag pass. HsTyVarBndr flag pass -> Bool
isHsKindedTyVar (UserTyVar {}) = Bool
False
isHsKindedTyVar (KindedTyVar {}) = Bool
True
isHsKindedTyVar (XTyVarBndr {}) = Bool
False
hsTvbAllKinded :: LHsQTyVars pass -> Bool
hsTvbAllKinded :: forall pass. LHsQTyVars pass -> Bool
hsTvbAllKinded = (GenLocated SrcSpan (HsTyVarBndr () pass) -> Bool)
-> [GenLocated SrcSpan (HsTyVarBndr () pass)] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (HsTyVarBndr () pass -> Bool
forall flag pass. HsTyVarBndr flag pass -> Bool
isHsKindedTyVar (HsTyVarBndr () pass -> Bool)
-> (GenLocated SrcSpan (HsTyVarBndr () pass)
-> HsTyVarBndr () pass)
-> GenLocated SrcSpan (HsTyVarBndr () pass)
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpan (HsTyVarBndr () pass) -> HsTyVarBndr () pass
forall l e. GenLocated l e -> e
unLoc) ([GenLocated SrcSpan (HsTyVarBndr () pass)] -> Bool)
-> (LHsQTyVars pass -> [GenLocated SrcSpan (HsTyVarBndr () pass)])
-> LHsQTyVars pass
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LHsQTyVars pass -> [GenLocated SrcSpan (HsTyVarBndr () pass)]
forall pass. LHsQTyVars pass -> [LHsTyVarBndr () pass]
hsQTvExplicit
instance NamedThing (HsTyVarBndr flag GhcRn) where
getName :: HsTyVarBndr flag GhcRn -> Name
getName (UserTyVar XUserTyVar GhcRn
_ flag
_ Located (IdP GhcRn)
v) = GenLocated SrcSpan Name -> Name
forall l e. GenLocated l e -> e
unLoc GenLocated SrcSpan Name
Located (IdP GhcRn)
v
getName (KindedTyVar XKindedTyVar GhcRn
_ flag
_ Located (IdP GhcRn)
v LHsKind GhcRn
_) = GenLocated SrcSpan Name -> Name
forall l e. GenLocated l e -> e
unLoc GenLocated SrcSpan Name
Located (IdP GhcRn)
v
data HsType pass
= HsForAllTy
{ forall pass. HsType pass -> XForAllTy pass
hst_xforall :: XForAllTy pass
, forall pass. HsType pass -> HsForAllTelescope pass
hst_tele :: HsForAllTelescope pass
, forall pass. HsType pass -> LHsType pass
hst_body :: LHsType pass
}
| HsQualTy
{ forall pass. HsType pass -> XQualTy pass
hst_xqual :: XQualTy pass
, forall pass. HsType pass -> LHsContext pass
hst_ctxt :: LHsContext pass
, hst_body :: LHsType pass }
| HsTyVar (XTyVar pass)
PromotionFlag
(Located (IdP pass))
| HsAppTy (XAppTy pass)
(LHsType pass)
(LHsType pass)
| HsAppKindTy (XAppKindTy pass)
(LHsType pass)
(LHsKind pass)
| HsFunTy (XFunTy pass)
(HsArrow pass)
(LHsType pass)
(LHsType pass)
| HsListTy (XListTy pass)
(LHsType pass)
| HsTupleTy (XTupleTy pass)
HsTupleSort
[LHsType pass]
| HsSumTy (XSumTy pass)
[LHsType pass]
| HsOpTy (XOpTy pass)
(LHsType pass) (Located (IdP pass)) (LHsType pass)
| HsParTy (XParTy pass)
(LHsType pass)
| HsIParamTy (XIParamTy pass)
(Located HsIPName)
(LHsType pass)
| HsStarTy (XStarTy pass)
Bool
| HsKindSig (XKindSig pass)
(LHsType pass)
(LHsKind pass)
| HsSpliceTy (XSpliceTy pass)
(HsSplice pass)
| HsDocTy (XDocTy pass)
(LHsType pass) LHsDocString
| HsBangTy (XBangTy pass)
HsSrcBang (LHsType pass)
| HsRecTy (XRecTy pass)
[LConDeclField pass]
| HsExplicitListTy
(XExplicitListTy pass)
PromotionFlag
[LHsType pass]
| HsExplicitTupleTy
(XExplicitTupleTy pass)
[LHsType pass]
| HsTyLit (XTyLit pass) HsTyLit
| HsWildCardTy (XWildCardTy pass)
| XHsType
(XXType pass)
data NewHsTypeX
= NHsCoreTy Type
deriving Typeable NewHsTypeX
Typeable NewHsTypeX
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> NewHsTypeX -> c NewHsTypeX)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c NewHsTypeX)
-> (NewHsTypeX -> Constr)
-> (NewHsTypeX -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c NewHsTypeX))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c NewHsTypeX))
-> ((forall b. Data b => b -> b) -> NewHsTypeX -> NewHsTypeX)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> NewHsTypeX -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> NewHsTypeX -> r)
-> (forall u. (forall d. Data d => d -> u) -> NewHsTypeX -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> NewHsTypeX -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> NewHsTypeX -> m NewHsTypeX)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NewHsTypeX -> m NewHsTypeX)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NewHsTypeX -> m NewHsTypeX)
-> Data NewHsTypeX
NewHsTypeX -> DataType
NewHsTypeX -> Constr
(forall b. Data b => b -> b) -> NewHsTypeX -> NewHsTypeX
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> NewHsTypeX -> u
forall u. (forall d. Data d => d -> u) -> NewHsTypeX -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> NewHsTypeX -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> NewHsTypeX -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> NewHsTypeX -> m NewHsTypeX
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NewHsTypeX -> m NewHsTypeX
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c NewHsTypeX
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> NewHsTypeX -> c NewHsTypeX
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c NewHsTypeX)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c NewHsTypeX)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NewHsTypeX -> m NewHsTypeX
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NewHsTypeX -> m NewHsTypeX
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NewHsTypeX -> m NewHsTypeX
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NewHsTypeX -> m NewHsTypeX
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> NewHsTypeX -> m NewHsTypeX
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> NewHsTypeX -> m NewHsTypeX
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> NewHsTypeX -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> NewHsTypeX -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> NewHsTypeX -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> NewHsTypeX -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> NewHsTypeX -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> NewHsTypeX -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> NewHsTypeX -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> NewHsTypeX -> r
gmapT :: (forall b. Data b => b -> b) -> NewHsTypeX -> NewHsTypeX
$cgmapT :: (forall b. Data b => b -> b) -> NewHsTypeX -> NewHsTypeX
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c NewHsTypeX)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c NewHsTypeX)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c NewHsTypeX)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c NewHsTypeX)
dataTypeOf :: NewHsTypeX -> DataType
$cdataTypeOf :: NewHsTypeX -> DataType
toConstr :: NewHsTypeX -> Constr
$ctoConstr :: NewHsTypeX -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c NewHsTypeX
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c NewHsTypeX
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> NewHsTypeX -> c NewHsTypeX
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> NewHsTypeX -> c NewHsTypeX
Data
instance Outputable NewHsTypeX where
ppr :: NewHsTypeX -> SDoc
ppr (NHsCoreTy Type
ty) = Type -> SDoc
forall a. Outputable a => a -> SDoc
ppr Type
ty
type instance XForAllTy (GhcPass _) = NoExtField
type instance XQualTy (GhcPass _) = NoExtField
type instance XTyVar (GhcPass _) = NoExtField
type instance XAppTy (GhcPass _) = NoExtField
type instance XFunTy (GhcPass _) = NoExtField
type instance XListTy (GhcPass _) = NoExtField
type instance XTupleTy (GhcPass _) = NoExtField
type instance XSumTy (GhcPass _) = NoExtField
type instance XOpTy (GhcPass _) = NoExtField
type instance XParTy (GhcPass _) = NoExtField
type instance XIParamTy (GhcPass _) = NoExtField
type instance XStarTy (GhcPass _) = NoExtField
type instance XKindSig (GhcPass _) = NoExtField
type instance XAppKindTy (GhcPass _) = SrcSpan
type instance XSpliceTy GhcPs = NoExtField
type instance XSpliceTy GhcRn = NoExtField
type instance XSpliceTy GhcTc = Kind
type instance XDocTy (GhcPass _) = NoExtField
type instance XBangTy (GhcPass _) = NoExtField
type instance XRecTy (GhcPass _) = NoExtField
type instance XExplicitListTy GhcPs = NoExtField
type instance XExplicitListTy GhcRn = NoExtField
type instance XExplicitListTy GhcTc = Kind
type instance XExplicitTupleTy GhcPs = NoExtField
type instance XExplicitTupleTy GhcRn = NoExtField
type instance XExplicitTupleTy GhcTc = [Kind]
type instance XTyLit (GhcPass _) = NoExtField
type instance XWildCardTy (GhcPass _) = NoExtField
type instance XXType (GhcPass _) = NewHsTypeX
data HsTyLit
= HsNumTy SourceText Integer
| HsStrTy SourceText FastString
deriving Typeable HsTyLit
Typeable HsTyLit
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsTyLit -> c HsTyLit)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsTyLit)
-> (HsTyLit -> Constr)
-> (HsTyLit -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsTyLit))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsTyLit))
-> ((forall b. Data b => b -> b) -> HsTyLit -> HsTyLit)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsTyLit -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsTyLit -> r)
-> (forall u. (forall d. Data d => d -> u) -> HsTyLit -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> HsTyLit -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsTyLit -> m HsTyLit)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTyLit -> m HsTyLit)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTyLit -> m HsTyLit)
-> Data HsTyLit
HsTyLit -> DataType
HsTyLit -> Constr
(forall b. Data b => b -> b) -> HsTyLit -> HsTyLit
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> HsTyLit -> u
forall u. (forall d. Data d => d -> u) -> HsTyLit -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsTyLit -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsTyLit -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsTyLit -> m HsTyLit
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTyLit -> m HsTyLit
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsTyLit
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsTyLit -> c HsTyLit
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsTyLit)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsTyLit)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTyLit -> m HsTyLit
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTyLit -> m HsTyLit
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTyLit -> m HsTyLit
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTyLit -> m HsTyLit
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsTyLit -> m HsTyLit
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsTyLit -> m HsTyLit
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> HsTyLit -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> HsTyLit -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> HsTyLit -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> HsTyLit -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsTyLit -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsTyLit -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsTyLit -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsTyLit -> r
gmapT :: (forall b. Data b => b -> b) -> HsTyLit -> HsTyLit
$cgmapT :: (forall b. Data b => b -> b) -> HsTyLit -> HsTyLit
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsTyLit)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsTyLit)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsTyLit)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsTyLit)
dataTypeOf :: HsTyLit -> DataType
$cdataTypeOf :: HsTyLit -> DataType
toConstr :: HsTyLit -> Constr
$ctoConstr :: HsTyLit -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsTyLit
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsTyLit
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsTyLit -> c HsTyLit
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsTyLit -> c HsTyLit
Data
oneDataConHsTy :: HsType GhcRn
oneDataConHsTy :: HsType GhcRn
oneDataConHsTy = XTyVar GhcRn
-> PromotionFlag -> Located (IdP GhcRn) -> HsType GhcRn
forall pass.
XTyVar pass -> PromotionFlag -> Located (IdP pass) -> HsType pass
HsTyVar NoExtField
XTyVar GhcRn
noExtField PromotionFlag
NotPromoted (Name -> GenLocated SrcSpan Name
forall e. e -> Located e
noLoc Name
oneDataConName)
manyDataConHsTy :: HsType GhcRn
manyDataConHsTy :: HsType GhcRn
manyDataConHsTy = XTyVar GhcRn
-> PromotionFlag -> Located (IdP GhcRn) -> HsType GhcRn
forall pass.
XTyVar pass -> PromotionFlag -> Located (IdP pass) -> HsType pass
HsTyVar NoExtField
XTyVar GhcRn
noExtField PromotionFlag
NotPromoted (Name -> GenLocated SrcSpan Name
forall e. e -> Located e
noLoc Name
manyDataConName)
isUnrestricted :: HsArrow GhcRn -> Bool
isUnrestricted :: HsArrow GhcRn -> Bool
isUnrestricted (HsArrow GhcRn -> LHsKind GhcRn
arrowToHsType -> L SrcSpan
_ (HsTyVar XTyVar GhcRn
_ PromotionFlag
_ (L SrcSpan
_ IdP GhcRn
n))) = Name
IdP GhcRn
n Name -> Name -> Bool
forall a. Eq a => a -> a -> Bool
== Name
manyDataConName
isUnrestricted HsArrow GhcRn
_ = Bool
False
data HsArrow pass
= HsUnrestrictedArrow IsUnicodeSyntax
| HsLinearArrow IsUnicodeSyntax
| HsExplicitMult IsUnicodeSyntax (LHsType pass)
arrowToHsType :: HsArrow GhcRn -> LHsType GhcRn
arrowToHsType :: HsArrow GhcRn -> LHsKind GhcRn
arrowToHsType (HsUnrestrictedArrow IsUnicodeSyntax
_) = HsType GhcRn -> LHsKind GhcRn
forall e. e -> Located e
noLoc HsType GhcRn
manyDataConHsTy
arrowToHsType (HsLinearArrow IsUnicodeSyntax
_) = HsType GhcRn -> LHsKind GhcRn
forall e. e -> Located e
noLoc HsType GhcRn
oneDataConHsTy
arrowToHsType (HsExplicitMult IsUnicodeSyntax
_ LHsKind GhcRn
p) = LHsKind GhcRn
p
data HsScaled pass a = HsScaled (HsArrow pass) a
hsMult :: HsScaled pass a -> HsArrow pass
hsMult :: forall pass a. HsScaled pass a -> HsArrow pass
hsMult (HsScaled HsArrow pass
m a
_) = HsArrow pass
m
hsScaledThing :: HsScaled pass a -> a
hsScaledThing :: forall pass a. HsScaled pass a -> a
hsScaledThing (HsScaled HsArrow pass
_ a
t) = a
t
hsUnrestricted, hsLinear :: a -> HsScaled pass a
hsUnrestricted :: forall a pass. a -> HsScaled pass a
hsUnrestricted = HsArrow pass -> a -> HsScaled pass a
forall pass a. HsArrow pass -> a -> HsScaled pass a
HsScaled (IsUnicodeSyntax -> HsArrow pass
forall pass. IsUnicodeSyntax -> HsArrow pass
HsUnrestrictedArrow IsUnicodeSyntax
NormalSyntax)
hsLinear :: forall a pass. a -> HsScaled pass a
hsLinear = HsArrow pass -> a -> HsScaled pass a
forall pass a. HsArrow pass -> a -> HsScaled pass a
HsScaled (IsUnicodeSyntax -> HsArrow pass
forall pass. IsUnicodeSyntax -> HsArrow pass
HsLinearArrow IsUnicodeSyntax
NormalSyntax)
instance Outputable a => Outputable (HsScaled pass a) where
ppr :: HsScaled pass a -> SDoc
ppr (HsScaled HsArrow pass
_cnt a
t) =
a -> SDoc
forall a. Outputable a => a -> SDoc
ppr a
t
instance
(OutputableBndrId pass) =>
Outputable (HsArrow (GhcPass pass)) where
ppr :: HsArrow (GhcPass pass) -> SDoc
ppr HsArrow (GhcPass pass)
arr = SDoc -> SDoc
parens (HsArrow (GhcPass pass) -> SDoc
forall (pass :: Pass).
OutputableBndrId pass =>
HsArrow (GhcPass pass) -> SDoc
pprHsArrow HsArrow (GhcPass pass)
arr)
pprHsArrow :: (OutputableBndrId pass) => HsArrow (GhcPass pass) -> SDoc
pprHsArrow :: forall (pass :: Pass).
OutputableBndrId pass =>
HsArrow (GhcPass pass) -> SDoc
pprHsArrow (HsUnrestrictedArrow IsUnicodeSyntax
_) = SDoc
arrow
pprHsArrow (HsLinearArrow IsUnicodeSyntax
_) = SDoc
lollipop
pprHsArrow (HsExplicitMult IsUnicodeSyntax
_ LHsType (GhcPass pass)
p) = (SDoc -> SDoc
mulArrow (LHsType (GhcPass pass) -> SDoc
forall a. Outputable a => a -> SDoc
ppr LHsType (GhcPass pass)
p))
data HsTupleSort = HsUnboxedTuple
| HsBoxedTuple
| HsConstraintTuple
| HsBoxedOrConstraintTuple
deriving Typeable HsTupleSort
Typeable HsTupleSort
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsTupleSort -> c HsTupleSort)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsTupleSort)
-> (HsTupleSort -> Constr)
-> (HsTupleSort -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsTupleSort))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c HsTupleSort))
-> ((forall b. Data b => b -> b) -> HsTupleSort -> HsTupleSort)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsTupleSort -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsTupleSort -> r)
-> (forall u. (forall d. Data d => d -> u) -> HsTupleSort -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> HsTupleSort -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsTupleSort -> m HsTupleSort)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTupleSort -> m HsTupleSort)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTupleSort -> m HsTupleSort)
-> Data HsTupleSort
HsTupleSort -> DataType
HsTupleSort -> Constr
(forall b. Data b => b -> b) -> HsTupleSort -> HsTupleSort
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> HsTupleSort -> u
forall u. (forall d. Data d => d -> u) -> HsTupleSort -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsTupleSort -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsTupleSort -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsTupleSort -> m HsTupleSort
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTupleSort -> m HsTupleSort
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsTupleSort
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsTupleSort -> c HsTupleSort
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsTupleSort)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c HsTupleSort)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTupleSort -> m HsTupleSort
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTupleSort -> m HsTupleSort
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTupleSort -> m HsTupleSort
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HsTupleSort -> m HsTupleSort
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsTupleSort -> m HsTupleSort
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HsTupleSort -> m HsTupleSort
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> HsTupleSort -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> HsTupleSort -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> HsTupleSort -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> HsTupleSort -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsTupleSort -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsTupleSort -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsTupleSort -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsTupleSort -> r
gmapT :: (forall b. Data b => b -> b) -> HsTupleSort -> HsTupleSort
$cgmapT :: (forall b. Data b => b -> b) -> HsTupleSort -> HsTupleSort
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c HsTupleSort)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c HsTupleSort)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsTupleSort)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HsTupleSort)
dataTypeOf :: HsTupleSort -> DataType
$cdataTypeOf :: HsTupleSort -> DataType
toConstr :: HsTupleSort -> Constr
$ctoConstr :: HsTupleSort -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsTupleSort
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HsTupleSort
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsTupleSort -> c HsTupleSort
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HsTupleSort -> c HsTupleSort
Data
type LConDeclField pass = Located (ConDeclField pass)
data ConDeclField pass
= ConDeclField { forall pass. ConDeclField pass -> XConDeclField pass
cd_fld_ext :: XConDeclField pass,
forall pass. ConDeclField pass -> [LFieldOcc pass]
cd_fld_names :: [LFieldOcc pass],
forall pass. ConDeclField pass -> LBangType pass
cd_fld_type :: LBangType pass,
forall pass. ConDeclField pass -> Maybe LHsDocString
cd_fld_doc :: Maybe LHsDocString }
| XConDeclField !(XXConDeclField pass)
type instance XConDeclField (GhcPass _) = NoExtField
type instance XXConDeclField (GhcPass _) = NoExtCon
instance OutputableBndrId p
=> Outputable (ConDeclField (GhcPass p)) where
ppr :: ConDeclField (GhcPass p) -> SDoc
ppr (ConDeclField XConDeclField (GhcPass p)
_ [LFieldOcc (GhcPass p)]
fld_n LBangType (GhcPass p)
fld_ty Maybe LHsDocString
_) = [LFieldOcc (GhcPass p)] -> SDoc
forall a. Outputable a => a -> SDoc
ppr [LFieldOcc (GhcPass p)]
fld_n SDoc -> SDoc -> SDoc
<+> SDoc
dcolon SDoc -> SDoc -> SDoc
<+> LBangType (GhcPass p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr LBangType (GhcPass p)
fld_ty
data HsConDetails arg rec
= PrefixCon [arg]
| RecCon rec
| InfixCon arg arg
deriving Typeable (HsConDetails arg rec)
Typeable (HsConDetails arg rec)
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> HsConDetails arg rec
-> c (HsConDetails arg rec))
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (HsConDetails arg rec))
-> (HsConDetails arg rec -> Constr)
-> (HsConDetails arg rec -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (HsConDetails arg rec)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (HsConDetails arg rec)))
-> ((forall b. Data b => b -> b)
-> HsConDetails arg rec -> HsConDetails arg rec)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsConDetails arg rec -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsConDetails arg rec -> r)
-> (forall u.
(forall d. Data d => d -> u) -> HsConDetails arg rec -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> HsConDetails arg rec -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec))
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec))
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec))
-> Data (HsConDetails arg rec)
HsConDetails arg rec -> DataType
HsConDetails arg rec -> Constr
(forall b. Data b => b -> b)
-> HsConDetails arg rec -> HsConDetails arg rec
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> HsConDetails arg rec -> u
forall u.
(forall d. Data d => d -> u) -> HsConDetails arg rec -> [u]
forall {arg} {rec}.
(Data arg, Data rec) =>
Typeable (HsConDetails arg rec)
forall arg rec.
(Data arg, Data rec) =>
HsConDetails arg rec -> DataType
forall arg rec.
(Data arg, Data rec) =>
HsConDetails arg rec -> Constr
forall arg rec.
(Data arg, Data rec) =>
(forall b. Data b => b -> b)
-> HsConDetails arg rec -> HsConDetails arg rec
forall arg rec u.
(Data arg, Data rec) =>
Int -> (forall d. Data d => d -> u) -> HsConDetails arg rec -> u
forall arg rec u.
(Data arg, Data rec) =>
(forall d. Data d => d -> u) -> HsConDetails arg rec -> [u]
forall arg rec r r'.
(Data arg, Data rec) =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsConDetails arg rec -> r
forall arg rec r r'.
(Data arg, Data rec) =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsConDetails arg rec -> r
forall arg rec (m :: * -> *).
(Data arg, Data rec, Monad m) =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec)
forall arg rec (m :: * -> *).
(Data arg, Data rec, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec)
forall arg rec (c :: * -> *).
(Data arg, Data rec) =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (HsConDetails arg rec)
forall arg rec (c :: * -> *).
(Data arg, Data rec) =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> HsConDetails arg rec
-> c (HsConDetails arg rec)
forall arg rec (t :: * -> *) (c :: * -> *).
(Data arg, Data rec, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (HsConDetails arg rec))
forall arg rec (t :: * -> * -> *) (c :: * -> *).
(Data arg, Data rec, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (HsConDetails arg rec))
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsConDetails arg rec -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsConDetails arg rec -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (HsConDetails arg rec)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> HsConDetails arg rec
-> c (HsConDetails arg rec)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (HsConDetails arg rec))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (HsConDetails arg rec))
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec)
$cgmapMo :: forall arg rec (m :: * -> *).
(Data arg, Data rec, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec)
$cgmapMp :: forall arg rec (m :: * -> *).
(Data arg, Data rec, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec)
$cgmapM :: forall arg rec (m :: * -> *).
(Data arg, Data rec, Monad m) =>
(forall d. Data d => d -> m d)
-> HsConDetails arg rec -> m (HsConDetails arg rec)
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> HsConDetails arg rec -> u
$cgmapQi :: forall arg rec u.
(Data arg, Data rec) =>
Int -> (forall d. Data d => d -> u) -> HsConDetails arg rec -> u
gmapQ :: forall u.
(forall d. Data d => d -> u) -> HsConDetails arg rec -> [u]
$cgmapQ :: forall arg rec u.
(Data arg, Data rec) =>
(forall d. Data d => d -> u) -> HsConDetails arg rec -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsConDetails arg rec -> r
$cgmapQr :: forall arg rec r r'.
(Data arg, Data rec) =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HsConDetails arg rec -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsConDetails arg rec -> r
$cgmapQl :: forall arg rec r r'.
(Data arg, Data rec) =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HsConDetails arg rec -> r
gmapT :: (forall b. Data b => b -> b)
-> HsConDetails arg rec -> HsConDetails arg rec
$cgmapT :: forall arg rec.
(Data arg, Data rec) =>
(forall b. Data b => b -> b)
-> HsConDetails arg rec -> HsConDetails arg rec
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (HsConDetails arg rec))
$cdataCast2 :: forall arg rec (t :: * -> * -> *) (c :: * -> *).
(Data arg, Data rec, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (HsConDetails arg rec))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (HsConDetails arg rec))
$cdataCast1 :: forall arg rec (t :: * -> *) (c :: * -> *).
(Data arg, Data rec, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (HsConDetails arg rec))
dataTypeOf :: HsConDetails arg rec -> DataType
$cdataTypeOf :: forall arg rec.
(Data arg, Data rec) =>
HsConDetails arg rec -> DataType
toConstr :: HsConDetails arg rec -> Constr
$ctoConstr :: forall arg rec.
(Data arg, Data rec) =>
HsConDetails arg rec -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (HsConDetails arg rec)
$cgunfold :: forall arg rec (c :: * -> *).
(Data arg, Data rec) =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (HsConDetails arg rec)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> HsConDetails arg rec
-> c (HsConDetails arg rec)
$cgfoldl :: forall arg rec (c :: * -> *).
(Data arg, Data rec) =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> HsConDetails arg rec
-> c (HsConDetails arg rec)
Data
instance (Outputable arg, Outputable rec)
=> Outputable (HsConDetails arg rec) where
ppr :: HsConDetails arg rec -> SDoc
ppr (PrefixCon [arg]
args) = String -> SDoc
text String
"PrefixCon" SDoc -> SDoc -> SDoc
<+> [arg] -> SDoc
forall a. Outputable a => a -> SDoc
ppr [arg]
args
ppr (RecCon rec
rec) = String -> SDoc
text String
"RecCon:" SDoc -> SDoc -> SDoc
<+> rec -> SDoc
forall a. Outputable a => a -> SDoc
ppr rec
rec
ppr (InfixCon arg
l arg
r) = String -> SDoc
text String
"InfixCon:" SDoc -> SDoc -> SDoc
<+> [arg] -> SDoc
forall a. Outputable a => a -> SDoc
ppr [arg
l, arg
r]
hsConDetailsArgs ::
HsConDetails (LHsType a) (Located [LConDeclField a])
-> [LHsType a]
hsConDetailsArgs :: forall a.
HsConDetails (LHsType a) (Located [LConDeclField a]) -> [LHsType a]
hsConDetailsArgs HsConDetails (LHsType a) (Located [LConDeclField a])
details = case HsConDetails (LHsType a) (Located [LConDeclField a])
details of
InfixCon LHsType a
a LHsType a
b -> [LHsType a
a,LHsType a
b]
PrefixCon [LHsType a]
xs -> [LHsType a]
xs
RecCon Located [LConDeclField a]
r -> (LConDeclField a -> LHsType a) -> [LConDeclField a] -> [LHsType a]
forall a b. (a -> b) -> [a] -> [b]
map (ConDeclField a -> LHsType a
forall pass. ConDeclField pass -> LBangType pass
cd_fld_type (ConDeclField a -> LHsType a)
-> (LConDeclField a -> ConDeclField a)
-> LConDeclField a
-> LHsType a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LConDeclField a -> ConDeclField a
forall l e. GenLocated l e -> e
unLoc) (Located [LConDeclField a] -> [LConDeclField a]
forall l e. GenLocated l e -> e
unLoc Located [LConDeclField a]
r)
hsWcScopedTvs :: LHsSigWcType GhcRn -> [Name]
hsWcScopedTvs :: LHsSigWcType GhcRn -> [Name]
hsWcScopedTvs LHsSigWcType GhcRn
sig_ty
| HsWC { hswc_ext :: forall pass thing. HsWildCardBndrs pass thing -> XHsWC pass thing
hswc_ext = XHsWC GhcRn (LHsSigType GhcRn)
nwcs, hswc_body :: forall pass thing. HsWildCardBndrs pass thing -> thing
hswc_body = LHsSigType GhcRn
sig_ty1 } <- LHsSigWcType GhcRn
sig_ty
, HsIB { hsib_ext :: forall pass thing. HsImplicitBndrs pass thing -> XHsIB pass thing
hsib_ext = XHsIB GhcRn (LHsKind GhcRn)
vars
, hsib_body :: forall pass thing. HsImplicitBndrs pass thing -> thing
hsib_body = LHsKind GhcRn
sig_ty2 } <- LHsSigType GhcRn
sig_ty1
= case LHsKind GhcRn
sig_ty2 of
L SrcSpan
_ (HsForAllTy { hst_tele :: forall pass. HsType pass -> HsForAllTelescope pass
hst_tele = HsForAllInvis { hsf_invis_bndrs :: forall pass.
HsForAllTelescope pass -> [LHsTyVarBndr Specificity pass]
hsf_invis_bndrs = [LHsTyVarBndr Specificity GhcRn]
tvs }}) ->
[Name]
XHsIB GhcRn (LHsKind GhcRn)
vars [Name] -> [Name] -> [Name]
forall a. [a] -> [a] -> [a]
++ [Name]
XHsWC GhcRn (LHsSigType GhcRn)
nwcs [Name] -> [Name] -> [Name]
forall a. [a] -> [a] -> [a]
++ [LHsTyVarBndr Specificity GhcRn] -> [IdP GhcRn]
forall flag (p :: Pass).
[LHsTyVarBndr flag (GhcPass p)] -> [IdP (GhcPass p)]
hsLTyVarNames [LHsTyVarBndr Specificity GhcRn]
tvs
LHsKind GhcRn
_ -> [Name]
XHsWC GhcRn (LHsSigType GhcRn)
nwcs
hsScopedTvs :: LHsSigType GhcRn -> [Name]
hsScopedTvs :: LHsSigType GhcRn -> [Name]
hsScopedTvs LHsSigType GhcRn
sig_ty
| HsIB { hsib_ext :: forall pass thing. HsImplicitBndrs pass thing -> XHsIB pass thing
hsib_ext = XHsIB GhcRn (LHsKind GhcRn)
vars
, hsib_body :: forall pass thing. HsImplicitBndrs pass thing -> thing
hsib_body = LHsKind GhcRn
sig_ty2 } <- LHsSigType GhcRn
sig_ty
, L SrcSpan
_ (HsForAllTy { hst_tele :: forall pass. HsType pass -> HsForAllTelescope pass
hst_tele = HsForAllInvis { hsf_invis_bndrs :: forall pass.
HsForAllTelescope pass -> [LHsTyVarBndr Specificity pass]
hsf_invis_bndrs = [LHsTyVarBndr Specificity GhcRn]
tvs }})
<- LHsKind GhcRn
sig_ty2
= [Name]
XHsIB GhcRn (LHsKind GhcRn)
vars [Name] -> [Name] -> [Name]
forall a. [a] -> [a] -> [a]
++ [LHsTyVarBndr Specificity GhcRn] -> [IdP GhcRn]
forall flag (p :: Pass).
[LHsTyVarBndr flag (GhcPass p)] -> [IdP (GhcPass p)]
hsLTyVarNames [LHsTyVarBndr Specificity GhcRn]
tvs
| Bool
otherwise
= []
hsTyVarName :: HsTyVarBndr flag (GhcPass p) -> IdP (GhcPass p)
hsTyVarName :: forall flag (p :: Pass).
HsTyVarBndr flag (GhcPass p) -> IdP (GhcPass p)
hsTyVarName (UserTyVar XUserTyVar (GhcPass p)
_ flag
_ (L SrcSpan
_ IdP (GhcPass p)
n)) = IdP (GhcPass p)
n
hsTyVarName (KindedTyVar XKindedTyVar (GhcPass p)
_ flag
_ (L SrcSpan
_ IdP (GhcPass p)
n) LHsKind (GhcPass p)
_) = IdP (GhcPass p)
n
hsLTyVarName :: LHsTyVarBndr flag (GhcPass p) -> IdP (GhcPass p)
hsLTyVarName :: forall flag (p :: Pass).
LHsTyVarBndr flag (GhcPass p) -> IdP (GhcPass p)
hsLTyVarName = HsTyVarBndr flag (GhcPass p) -> IdGhcP p
forall flag (p :: Pass).
HsTyVarBndr flag (GhcPass p) -> IdP (GhcPass p)
hsTyVarName (HsTyVarBndr flag (GhcPass p) -> IdGhcP p)
-> (GenLocated SrcSpan (HsTyVarBndr flag (GhcPass p))
-> HsTyVarBndr flag (GhcPass p))
-> GenLocated SrcSpan (HsTyVarBndr flag (GhcPass p))
-> IdGhcP p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpan (HsTyVarBndr flag (GhcPass p))
-> HsTyVarBndr flag (GhcPass p)
forall l e. GenLocated l e -> e
unLoc
hsLTyVarNames :: [LHsTyVarBndr flag (GhcPass p)] -> [IdP (GhcPass p)]
hsLTyVarNames :: forall flag (p :: Pass).
[LHsTyVarBndr flag (GhcPass p)] -> [IdP (GhcPass p)]
hsLTyVarNames = (GenLocated SrcSpan (HsTyVarBndr flag (GhcPass p)) -> IdGhcP p)
-> [GenLocated SrcSpan (HsTyVarBndr flag (GhcPass p))]
-> [IdGhcP p]
forall a b. (a -> b) -> [a] -> [b]
map GenLocated SrcSpan (HsTyVarBndr flag (GhcPass p)) -> IdGhcP p
forall flag (p :: Pass).
LHsTyVarBndr flag (GhcPass p) -> IdP (GhcPass p)
hsLTyVarName
hsExplicitLTyVarNames :: LHsQTyVars (GhcPass p) -> [IdP (GhcPass p)]
hsExplicitLTyVarNames :: forall (p :: Pass). LHsQTyVars (GhcPass p) -> [IdP (GhcPass p)]
hsExplicitLTyVarNames LHsQTyVars (GhcPass p)
qtvs = (LHsTyVarBndr () (GhcPass p) -> IdGhcP p)
-> [LHsTyVarBndr () (GhcPass p)] -> [IdGhcP p]
forall a b. (a -> b) -> [a] -> [b]
map LHsTyVarBndr () (GhcPass p) -> IdGhcP p
forall flag (p :: Pass).
LHsTyVarBndr flag (GhcPass p) -> IdP (GhcPass p)
hsLTyVarName (LHsQTyVars (GhcPass p) -> [LHsTyVarBndr () (GhcPass p)]
forall pass. LHsQTyVars pass -> [LHsTyVarBndr () pass]
hsQTvExplicit LHsQTyVars (GhcPass p)
qtvs)
hsAllLTyVarNames :: LHsQTyVars GhcRn -> [Name]
hsAllLTyVarNames :: LHsQTyVars GhcRn -> [Name]
hsAllLTyVarNames (HsQTvs { hsq_ext :: forall pass. LHsQTyVars pass -> XHsQTvs pass
hsq_ext = XHsQTvs GhcRn
kvs
, hsq_explicit :: forall pass. LHsQTyVars pass -> [LHsTyVarBndr () pass]
hsq_explicit = [LHsTyVarBndr () GhcRn]
tvs })
= [Name]
XHsQTvs GhcRn
kvs [Name] -> [Name] -> [Name]
forall a. [a] -> [a] -> [a]
++ [LHsTyVarBndr () GhcRn] -> [IdP GhcRn]
forall flag (p :: Pass).
[LHsTyVarBndr flag (GhcPass p)] -> [IdP (GhcPass p)]
hsLTyVarNames [LHsTyVarBndr () GhcRn]
tvs
hsLTyVarLocName :: LHsTyVarBndr flag (GhcPass p) -> Located (IdP (GhcPass p))
hsLTyVarLocName :: forall flag (p :: Pass).
LHsTyVarBndr flag (GhcPass p) -> Located (IdP (GhcPass p))
hsLTyVarLocName = (HsTyVarBndr flag (GhcPass p) -> IdGhcP p)
-> GenLocated SrcSpan (HsTyVarBndr flag (GhcPass p))
-> GenLocated SrcSpan (IdGhcP p)
forall a b l. (a -> b) -> GenLocated l a -> GenLocated l b
mapLoc HsTyVarBndr flag (GhcPass p) -> IdGhcP p
forall flag (p :: Pass).
HsTyVarBndr flag (GhcPass p) -> IdP (GhcPass p)
hsTyVarName
hsLTyVarLocNames :: LHsQTyVars (GhcPass p) -> [Located (IdP (GhcPass p))]
hsLTyVarLocNames :: forall (p :: Pass).
LHsQTyVars (GhcPass p) -> [Located (IdP (GhcPass p))]
hsLTyVarLocNames LHsQTyVars (GhcPass p)
qtvs = (LHsTyVarBndr () (GhcPass p) -> Located (IdGhcP p))
-> [LHsTyVarBndr () (GhcPass p)] -> [Located (IdGhcP p)]
forall a b. (a -> b) -> [a] -> [b]
map LHsTyVarBndr () (GhcPass p) -> Located (IdGhcP p)
forall flag (p :: Pass).
LHsTyVarBndr flag (GhcPass p) -> Located (IdP (GhcPass p))
hsLTyVarLocName (LHsQTyVars (GhcPass p) -> [LHsTyVarBndr () (GhcPass p)]
forall pass. LHsQTyVars pass -> [LHsTyVarBndr () pass]
hsQTvExplicit LHsQTyVars (GhcPass p)
qtvs)
hsTyKindSig :: LHsType pass -> Maybe (LHsKind pass)
hsTyKindSig :: forall pass. LHsType pass -> Maybe (LHsType pass)
hsTyKindSig LHsType pass
lty =
case LHsType pass -> HsType pass
forall l e. GenLocated l e -> e
unLoc LHsType pass
lty of
HsParTy XParTy pass
_ LHsType pass
lty' -> LHsType pass -> Maybe (LHsType pass)
forall pass. LHsType pass -> Maybe (LHsType pass)
hsTyKindSig LHsType pass
lty'
HsKindSig XKindSig pass
_ LHsType pass
_ LHsType pass
k -> LHsType pass -> Maybe (LHsType pass)
forall a. a -> Maybe a
Just LHsType pass
k
HsType pass
_ -> Maybe (LHsType pass)
forall a. Maybe a
Nothing
ignoreParens :: LHsType pass -> LHsType pass
ignoreParens :: forall a. LHsType a -> LHsType a
ignoreParens (L SrcSpan
_ (HsParTy XParTy pass
_ GenLocated SrcSpan (HsType pass)
ty)) = GenLocated SrcSpan (HsType pass)
-> GenLocated SrcSpan (HsType pass)
forall a. LHsType a -> LHsType a
ignoreParens GenLocated SrcSpan (HsType pass)
ty
ignoreParens GenLocated SrcSpan (HsType pass)
ty = GenLocated SrcSpan (HsType pass)
ty
isLHsForAllTy :: LHsType p -> Bool
isLHsForAllTy :: forall p. LHsType p -> Bool
isLHsForAllTy (L SrcSpan
_ (HsForAllTy {})) = Bool
True
isLHsForAllTy GenLocated SrcSpan (HsType p)
_ = Bool
False
mkAnonWildCardTy :: HsType GhcPs
mkAnonWildCardTy :: HsType GhcPs
mkAnonWildCardTy = XWildCardTy GhcPs -> HsType GhcPs
forall pass. XWildCardTy pass -> HsType pass
HsWildCardTy NoExtField
XWildCardTy GhcPs
noExtField
mkHsOpTy :: LHsType (GhcPass p) -> Located (IdP (GhcPass p))
-> LHsType (GhcPass p) -> HsType (GhcPass p)
mkHsOpTy :: forall (p :: Pass).
LHsType (GhcPass p)
-> Located (IdP (GhcPass p))
-> LHsType (GhcPass p)
-> HsType (GhcPass p)
mkHsOpTy LHsType (GhcPass p)
ty1 Located (IdP (GhcPass p))
op LHsType (GhcPass p)
ty2 = XOpTy (GhcPass p)
-> LHsType (GhcPass p)
-> Located (IdP (GhcPass p))
-> LHsType (GhcPass p)
-> HsType (GhcPass p)
forall pass.
XOpTy pass
-> LHsType pass
-> Located (IdP pass)
-> LHsType pass
-> HsType pass
HsOpTy NoExtField
XOpTy (GhcPass p)
noExtField LHsType (GhcPass p)
ty1 Located (IdP (GhcPass p))
op LHsType (GhcPass p)
ty2
mkHsAppTy :: LHsType (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p)
mkHsAppTy :: forall (p :: Pass).
LHsType (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p)
mkHsAppTy LHsType (GhcPass p)
t1 LHsType (GhcPass p)
t2
= LHsType (GhcPass p)
-> LHsType (GhcPass p) -> HsType (GhcPass p) -> LHsType (GhcPass p)
forall a b c. Located a -> Located b -> c -> Located c
addCLoc LHsType (GhcPass p)
t1 LHsType (GhcPass p)
t2 (XAppTy (GhcPass p)
-> LHsType (GhcPass p) -> LHsType (GhcPass p) -> HsType (GhcPass p)
forall pass.
XAppTy pass -> LHsType pass -> LHsType pass -> HsType pass
HsAppTy NoExtField
XAppTy (GhcPass p)
noExtField LHsType (GhcPass p)
t1 (PprPrec -> LHsType (GhcPass p) -> LHsType (GhcPass p)
forall (p :: Pass).
PprPrec -> LHsType (GhcPass p) -> LHsType (GhcPass p)
parenthesizeHsType PprPrec
appPrec LHsType (GhcPass p)
t2))
mkHsAppTys :: LHsType (GhcPass p) -> [LHsType (GhcPass p)]
-> LHsType (GhcPass p)
mkHsAppTys :: forall (p :: Pass).
LHsType (GhcPass p) -> [LHsType (GhcPass p)] -> LHsType (GhcPass p)
mkHsAppTys = (LHsType (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p))
-> LHsType (GhcPass p)
-> [LHsType (GhcPass p)]
-> LHsType (GhcPass p)
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' LHsType (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p)
forall (p :: Pass).
LHsType (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p)
mkHsAppTy
mkHsAppKindTy :: XAppKindTy (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p)
-> LHsType (GhcPass p)
mkHsAppKindTy :: forall (p :: Pass).
XAppKindTy (GhcPass p)
-> LHsType (GhcPass p)
-> LHsType (GhcPass p)
-> LHsType (GhcPass p)
mkHsAppKindTy XAppKindTy (GhcPass p)
ext LHsType (GhcPass p)
ty LHsType (GhcPass p)
k
= LHsType (GhcPass p)
-> LHsType (GhcPass p) -> HsType (GhcPass p) -> LHsType (GhcPass p)
forall a b c. Located a -> Located b -> c -> Located c
addCLoc LHsType (GhcPass p)
ty LHsType (GhcPass p)
k (XAppKindTy (GhcPass p)
-> LHsType (GhcPass p) -> LHsType (GhcPass p) -> HsType (GhcPass p)
forall pass.
XAppKindTy pass -> LHsType pass -> LHsType pass -> HsType pass
HsAppKindTy XAppKindTy (GhcPass p)
ext LHsType (GhcPass p)
ty LHsType (GhcPass p)
k)
splitHsFunType ::
LHsType (GhcPass p)
-> ([HsScaled (GhcPass p) (LHsType (GhcPass p))], LHsType (GhcPass p), [AddAnn])
splitHsFunType :: forall (p :: Pass).
LHsType (GhcPass p)
-> ([HsScaled (GhcPass p) (LHsType (GhcPass p))],
LHsType (GhcPass p), [AddAnn])
splitHsFunType LHsType (GhcPass p)
ty = LHsType (GhcPass p)
-> [AddAnn]
-> ([HsScaled (GhcPass p) (LHsType (GhcPass p))],
LHsType (GhcPass p), [AddAnn])
forall {pass}.
LHsType pass
-> [AddAnn]
-> ([HsScaled pass (LHsType pass)], LHsType pass, [AddAnn])
go LHsType (GhcPass p)
ty []
where
go :: LHsType pass
-> [AddAnn]
-> ([HsScaled pass (LHsType pass)], LHsType pass, [AddAnn])
go (L SrcSpan
l (HsParTy XParTy pass
_ LHsType pass
ty)) [AddAnn]
anns
= LHsType pass
-> [AddAnn]
-> ([HsScaled pass (LHsType pass)], LHsType pass, [AddAnn])
go LHsType pass
ty ([AddAnn]
anns [AddAnn] -> [AddAnn] -> [AddAnn]
forall a. [a] -> [a] -> [a]
++ SrcSpan -> [AddAnn]
mkParensApiAnn SrcSpan
l)
go (L SrcSpan
_ (HsFunTy XFunTy pass
_ HsArrow pass
mult LHsType pass
x LHsType pass
y)) [AddAnn]
anns
| ([HsScaled pass (LHsType pass)]
args, LHsType pass
res, [AddAnn]
anns') <- LHsType pass
-> [AddAnn]
-> ([HsScaled pass (LHsType pass)], LHsType pass, [AddAnn])
go LHsType pass
y [AddAnn]
anns
= (HsArrow pass -> LHsType pass -> HsScaled pass (LHsType pass)
forall pass a. HsArrow pass -> a -> HsScaled pass a
HsScaled HsArrow pass
mult LHsType pass
xHsScaled pass (LHsType pass)
-> [HsScaled pass (LHsType pass)] -> [HsScaled pass (LHsType pass)]
forall a. a -> [a] -> [a]
:[HsScaled pass (LHsType pass)]
args, LHsType pass
res, [AddAnn]
anns')
go LHsType pass
other [AddAnn]
anns = ([], LHsType pass
other, [AddAnn]
anns)
hsTyGetAppHead_maybe :: LHsType (GhcPass p)
-> Maybe (Located (IdP (GhcPass p)))
hsTyGetAppHead_maybe :: forall (p :: Pass).
LHsType (GhcPass p) -> Maybe (Located (IdP (GhcPass p)))
hsTyGetAppHead_maybe = LHsType (GhcPass p) -> Maybe (GenLocated SrcSpan (IdP (GhcPass p)))
forall {pass}.
LHsType pass -> Maybe (GenLocated SrcSpan (IdP pass))
go
where
go :: LHsType pass -> Maybe (GenLocated SrcSpan (IdP pass))
go (L SrcSpan
_ (HsTyVar XTyVar pass
_ PromotionFlag
_ GenLocated SrcSpan (IdP pass)
ln)) = GenLocated SrcSpan (IdP pass)
-> Maybe (GenLocated SrcSpan (IdP pass))
forall a. a -> Maybe a
Just GenLocated SrcSpan (IdP pass)
ln
go (L SrcSpan
_ (HsAppTy XAppTy pass
_ LHsType pass
l LHsType pass
_)) = LHsType pass -> Maybe (GenLocated SrcSpan (IdP pass))
go LHsType pass
l
go (L SrcSpan
_ (HsAppKindTy XAppKindTy pass
_ LHsType pass
t LHsType pass
_)) = LHsType pass -> Maybe (GenLocated SrcSpan (IdP pass))
go LHsType pass
t
go (L SrcSpan
_ (HsOpTy XOpTy pass
_ LHsType pass
_ (L SrcSpan
loc IdP pass
n) LHsType pass
_)) = GenLocated SrcSpan (IdP pass)
-> Maybe (GenLocated SrcSpan (IdP pass))
forall a. a -> Maybe a
Just (SrcSpan -> IdP pass -> GenLocated SrcSpan (IdP pass)
forall l e. l -> e -> GenLocated l e
L SrcSpan
loc IdP pass
n)
go (L SrcSpan
_ (HsParTy XParTy pass
_ LHsType pass
t)) = LHsType pass -> Maybe (GenLocated SrcSpan (IdP pass))
go LHsType pass
t
go (L SrcSpan
_ (HsKindSig XKindSig pass
_ LHsType pass
t LHsType pass
_)) = LHsType pass -> Maybe (GenLocated SrcSpan (IdP pass))
go LHsType pass
t
go LHsType pass
_ = Maybe (GenLocated SrcSpan (IdP pass))
forall a. Maybe a
Nothing
data HsArg tm ty
= HsValArg tm
| HsTypeArg SrcSpan ty
| HsArgPar SrcSpan
numVisibleArgs :: [HsArg tm ty] -> Arity
numVisibleArgs :: forall tm ty. [HsArg tm ty] -> Int
numVisibleArgs = (HsArg tm ty -> Bool) -> [HsArg tm ty] -> Int
forall a. (a -> Bool) -> [a] -> Int
count HsArg tm ty -> Bool
forall {tm} {ty}. HsArg tm ty -> Bool
is_vis
where is_vis :: HsArg tm ty -> Bool
is_vis (HsValArg tm
_) = Bool
True
is_vis HsArg tm ty
_ = Bool
False
type LHsTypeArg p = HsArg (LHsType p) (LHsKind p)
lhsTypeArgSrcSpan :: LHsTypeArg pass -> SrcSpan
lhsTypeArgSrcSpan :: forall pass. LHsTypeArg pass -> SrcSpan
lhsTypeArgSrcSpan LHsTypeArg pass
arg = case LHsTypeArg pass
arg of
HsValArg LHsType pass
tm -> LHsType pass -> SrcSpan
forall l e. GenLocated l e -> l
getLoc LHsType pass
tm
HsTypeArg SrcSpan
at LHsType pass
ty -> SrcSpan
at SrcSpan -> SrcSpan -> SrcSpan
`combineSrcSpans` LHsType pass -> SrcSpan
forall l e. GenLocated l e -> l
getLoc LHsType pass
ty
HsArgPar SrcSpan
sp -> SrcSpan
sp
instance (Outputable tm, Outputable ty) => Outputable (HsArg tm ty) where
ppr :: HsArg tm ty -> SDoc
ppr (HsValArg tm
tm) = tm -> SDoc
forall a. Outputable a => a -> SDoc
ppr tm
tm
ppr (HsTypeArg SrcSpan
_ ty
ty) = Char -> SDoc
char Char
'@' SDoc -> SDoc -> SDoc
<> ty -> SDoc
forall a. Outputable a => a -> SDoc
ppr ty
ty
ppr (HsArgPar SrcSpan
sp) = String -> SDoc
text String
"HsArgPar" SDoc -> SDoc -> SDoc
<+> SrcSpan -> SDoc
forall a. Outputable a => a -> SDoc
ppr SrcSpan
sp
splitLHsPatSynTy :: LHsType pass
-> ( [LHsTyVarBndr Specificity pass]
, LHsContext pass
, [LHsTyVarBndr Specificity pass]
, LHsContext pass
, LHsType pass)
splitLHsPatSynTy :: forall pass.
LHsType pass
-> ([LHsTyVarBndr Specificity pass], LHsContext pass,
[LHsTyVarBndr Specificity pass], LHsContext pass, LHsType pass)
splitLHsPatSynTy LHsType pass
ty = ([LHsTyVarBndr Specificity pass]
univs, LHsContext pass
reqs, [LHsTyVarBndr Specificity pass]
exis, LHsContext pass
provs, LHsType pass
ty4)
where
([LHsTyVarBndr Specificity pass]
univs, LHsType pass
ty1) = LHsType pass -> ([LHsTyVarBndr Specificity pass], LHsType pass)
forall pass.
LHsType pass -> ([LHsTyVarBndr Specificity pass], LHsType pass)
splitLHsForAllTyInvis LHsType pass
ty
(LHsContext pass
reqs, LHsType pass
ty2) = LHsType pass -> (LHsContext pass, LHsType pass)
forall pass. LHsType pass -> (LHsContext pass, LHsType pass)
splitLHsQualTy LHsType pass
ty1
([LHsTyVarBndr Specificity pass]
exis, LHsType pass
ty3) = LHsType pass -> ([LHsTyVarBndr Specificity pass], LHsType pass)
forall pass.
LHsType pass -> ([LHsTyVarBndr Specificity pass], LHsType pass)
splitLHsForAllTyInvis LHsType pass
ty2
(LHsContext pass
provs, LHsType pass
ty4) = LHsType pass -> (LHsContext pass, LHsType pass)
forall pass. LHsType pass -> (LHsContext pass, LHsType pass)
splitLHsQualTy LHsType pass
ty3
splitLHsSigmaTyInvis :: LHsType pass
-> ([LHsTyVarBndr Specificity pass], LHsContext pass, LHsType pass)
splitLHsSigmaTyInvis :: forall pass.
LHsType pass
-> ([LHsTyVarBndr Specificity pass], LHsContext pass, LHsType pass)
splitLHsSigmaTyInvis LHsType pass
ty
| ([LHsTyVarBndr Specificity pass]
tvs, LHsType pass
ty1) <- LHsType pass -> ([LHsTyVarBndr Specificity pass], LHsType pass)
forall pass.
LHsType pass -> ([LHsTyVarBndr Specificity pass], LHsType pass)
splitLHsForAllTyInvis LHsType pass
ty
, (LHsContext pass
ctxt, LHsType pass
ty2) <- LHsType pass -> (LHsContext pass, LHsType pass)
forall pass. LHsType pass -> (LHsContext pass, LHsType pass)
splitLHsQualTy LHsType pass
ty1
= ([LHsTyVarBndr Specificity pass]
tvs, LHsContext pass
ctxt, LHsType pass
ty2)
splitLHsSigmaTyInvis_KP ::
LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], Maybe (LHsContext pass), LHsType pass)
splitLHsSigmaTyInvis_KP :: forall pass.
LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], Maybe (LHsContext pass),
LHsType pass)
splitLHsSigmaTyInvis_KP LHsType pass
ty
| (Maybe [LHsTyVarBndr Specificity pass]
mb_tvbs, LHsType pass
ty1) <- LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], LHsType pass)
forall pass.
LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], LHsType pass)
splitLHsForAllTyInvis_KP LHsType pass
ty
, (Maybe (LHsContext pass)
mb_ctxt, LHsType pass
ty2) <- LHsType pass -> (Maybe (LHsContext pass), LHsType pass)
forall pass.
LHsType pass -> (Maybe (LHsContext pass), LHsType pass)
splitLHsQualTy_KP LHsType pass
ty1
= (Maybe [LHsTyVarBndr Specificity pass]
mb_tvbs, Maybe (LHsContext pass)
mb_ctxt, LHsType pass
ty2)
splitLHsGadtTy ::
LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], Maybe (LHsContext pass), LHsType pass)
splitLHsGadtTy :: forall pass.
LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], Maybe (LHsContext pass),
LHsType pass)
splitLHsGadtTy = LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], Maybe (LHsContext pass),
LHsType pass)
forall pass.
LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], Maybe (LHsContext pass),
LHsType pass)
splitLHsSigmaTyInvis_KP
splitLHsForAllTyInvis ::
LHsType pass -> ([LHsTyVarBndr Specificity pass], LHsType pass)
splitLHsForAllTyInvis :: forall pass.
LHsType pass -> ([LHsTyVarBndr Specificity pass], LHsType pass)
splitLHsForAllTyInvis LHsType pass
ty
| (Maybe [LHsTyVarBndr Specificity pass]
mb_tvbs, LHsType pass
body) <- LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], LHsType pass)
forall pass.
LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], LHsType pass)
splitLHsForAllTyInvis_KP (LHsType pass -> LHsType pass
forall a. LHsType a -> LHsType a
ignoreParens LHsType pass
ty)
= ([LHsTyVarBndr Specificity pass]
-> Maybe [LHsTyVarBndr Specificity pass]
-> [LHsTyVarBndr Specificity pass]
forall a. a -> Maybe a -> a
fromMaybe [] Maybe [LHsTyVarBndr Specificity pass]
mb_tvbs, LHsType pass
body)
splitLHsForAllTyInvis_KP ::
LHsType pass -> (Maybe [LHsTyVarBndr Specificity pass], LHsType pass)
splitLHsForAllTyInvis_KP :: forall pass.
LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], LHsType pass)
splitLHsForAllTyInvis_KP lty :: LHsType pass
lty@(L SrcSpan
_ HsType pass
ty) =
case HsType pass
ty of
HsForAllTy { hst_tele :: forall pass. HsType pass -> HsForAllTelescope pass
hst_tele = HsForAllInvis { hsf_invis_bndrs :: forall pass.
HsForAllTelescope pass -> [LHsTyVarBndr Specificity pass]
hsf_invis_bndrs = [LHsTyVarBndr Specificity pass]
tvs }
, hst_body :: forall pass. HsType pass -> LHsType pass
hst_body = LHsType pass
body }
-> ([LHsTyVarBndr Specificity pass]
-> Maybe [LHsTyVarBndr Specificity pass]
forall a. a -> Maybe a
Just [LHsTyVarBndr Specificity pass]
tvs, LHsType pass
body)
HsType pass
_ -> (Maybe [LHsTyVarBndr Specificity pass]
forall a. Maybe a
Nothing, LHsType pass
lty)
splitLHsQualTy :: LHsType pass -> (LHsContext pass, LHsType pass)
splitLHsQualTy :: forall pass. LHsType pass -> (LHsContext pass, LHsType pass)
splitLHsQualTy LHsType pass
ty
| (Maybe (LHsContext pass)
mb_ctxt, LHsType pass
body) <- LHsType pass -> (Maybe (LHsContext pass), LHsType pass)
forall pass.
LHsType pass -> (Maybe (LHsContext pass), LHsType pass)
splitLHsQualTy_KP (LHsType pass -> LHsType pass
forall a. LHsType a -> LHsType a
ignoreParens LHsType pass
ty)
= (LHsContext pass -> Maybe (LHsContext pass) -> LHsContext pass
forall a. a -> Maybe a -> a
fromMaybe LHsContext pass
forall pass. LHsContext pass
noLHsContext Maybe (LHsContext pass)
mb_ctxt, LHsType pass
body)
splitLHsQualTy_KP :: LHsType pass -> (Maybe (LHsContext pass), LHsType pass)
splitLHsQualTy_KP :: forall pass.
LHsType pass -> (Maybe (LHsContext pass), LHsType pass)
splitLHsQualTy_KP (L SrcSpan
_ (HsQualTy { hst_ctxt :: forall pass. HsType pass -> LHsContext pass
hst_ctxt = LHsContext pass
ctxt, hst_body :: forall pass. HsType pass -> LHsType pass
hst_body = GenLocated SrcSpan (HsType pass)
body }))
= (LHsContext pass -> Maybe (LHsContext pass)
forall a. a -> Maybe a
Just LHsContext pass
ctxt, GenLocated SrcSpan (HsType pass)
body)
splitLHsQualTy_KP GenLocated SrcSpan (HsType pass)
body = (Maybe (LHsContext pass)
forall a. Maybe a
Nothing, GenLocated SrcSpan (HsType pass)
body)
splitLHsInstDeclTy :: LHsSigType GhcRn
-> ([Name], LHsContext GhcRn, LHsType GhcRn)
splitLHsInstDeclTy :: LHsSigType GhcRn -> ([Name], LHsContext GhcRn, LHsKind GhcRn)
splitLHsInstDeclTy (HsIB { hsib_ext :: forall pass thing. HsImplicitBndrs pass thing -> XHsIB pass thing
hsib_ext = XHsIB GhcRn (LHsKind GhcRn)
itkvs
, hsib_body :: forall pass thing. HsImplicitBndrs pass thing -> thing
hsib_body = LHsKind GhcRn
inst_ty })
| (Maybe [LHsTyVarBndr Specificity GhcRn]
mb_tvs, Maybe (LHsContext GhcRn)
mb_cxt, LHsKind GhcRn
body_ty) <- LHsKind GhcRn
-> (Maybe [LHsTyVarBndr Specificity GhcRn],
Maybe (LHsContext GhcRn), LHsKind GhcRn)
forall pass.
LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], Maybe (LHsContext pass),
LHsType pass)
splitLHsSigmaTyInvis_KP LHsKind GhcRn
inst_ty
= ([Name]
XHsIB GhcRn (LHsKind GhcRn)
itkvs [Name] -> [Name] -> [Name]
forall a. [a] -> [a] -> [a]
++ [Name]
-> ([LHsTyVarBndr Specificity GhcRn] -> [Name])
-> Maybe [LHsTyVarBndr Specificity GhcRn]
-> [Name]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] [LHsTyVarBndr Specificity GhcRn] -> [Name]
forall flag (p :: Pass).
[LHsTyVarBndr flag (GhcPass p)] -> [IdP (GhcPass p)]
hsLTyVarNames Maybe [LHsTyVarBndr Specificity GhcRn]
mb_tvs, LHsContext GhcRn -> Maybe (LHsContext GhcRn) -> LHsContext GhcRn
forall a. a -> Maybe a -> a
fromMaybe LHsContext GhcRn
forall pass. LHsContext pass
noLHsContext Maybe (LHsContext GhcRn)
mb_cxt, LHsKind GhcRn
body_ty)
getLHsInstDeclHead :: LHsSigType (GhcPass p) -> LHsType (GhcPass p)
getLHsInstDeclHead :: forall (p :: Pass). LHsSigType (GhcPass p) -> LHsType (GhcPass p)
getLHsInstDeclHead (HsIB { hsib_body :: forall pass thing. HsImplicitBndrs pass thing -> thing
hsib_body = LHsType (GhcPass p)
inst_ty })
| (Maybe [LHsTyVarBndr Specificity (GhcPass p)]
_mb_tvs, Maybe (LHsContext (GhcPass p))
_mb_cxt, LHsType (GhcPass p)
body_ty) <- LHsType (GhcPass p)
-> (Maybe [LHsTyVarBndr Specificity (GhcPass p)],
Maybe (LHsContext (GhcPass p)), LHsType (GhcPass p))
forall pass.
LHsType pass
-> (Maybe [LHsTyVarBndr Specificity pass], Maybe (LHsContext pass),
LHsType pass)
splitLHsSigmaTyInvis_KP LHsType (GhcPass p)
inst_ty
= LHsType (GhcPass p)
body_ty
getLHsInstDeclClass_maybe :: LHsSigType (GhcPass p)
-> Maybe (Located (IdP (GhcPass p)))
getLHsInstDeclClass_maybe :: forall (p :: Pass).
LHsSigType (GhcPass p) -> Maybe (Located (IdP (GhcPass p)))
getLHsInstDeclClass_maybe LHsSigType (GhcPass p)
inst_ty
= do { let head_ty :: LHsType (GhcPass p)
head_ty = LHsSigType (GhcPass p) -> LHsType (GhcPass p)
forall (p :: Pass). LHsSigType (GhcPass p) -> LHsType (GhcPass p)
getLHsInstDeclHead LHsSigType (GhcPass p)
inst_ty
; Located (IdGhcP p)
cls <- LHsType (GhcPass p) -> Maybe (Located (IdP (GhcPass p)))
forall (p :: Pass).
LHsType (GhcPass p) -> Maybe (Located (IdP (GhcPass p)))
hsTyGetAppHead_maybe LHsType (GhcPass p)
head_ty
; Located (IdGhcP p) -> Maybe (Located (IdGhcP p))
forall (m :: * -> *) a. Monad m => a -> m a
return Located (IdGhcP p)
cls }
type LFieldOcc pass = Located (FieldOcc pass)
data FieldOcc pass = FieldOcc { forall pass. FieldOcc pass -> XCFieldOcc pass
extFieldOcc :: XCFieldOcc pass
, forall pass. FieldOcc pass -> Located RdrName
rdrNameFieldOcc :: Located RdrName
}
| XFieldOcc
!(XXFieldOcc pass)
deriving instance Eq (XCFieldOcc (GhcPass p)) => Eq (FieldOcc (GhcPass p))
type instance XCFieldOcc GhcPs = NoExtField
type instance XCFieldOcc GhcRn = Name
type instance XCFieldOcc GhcTc = Id
type instance XXFieldOcc (GhcPass _) = NoExtCon
instance Outputable (FieldOcc pass) where
ppr :: FieldOcc pass -> SDoc
ppr = Located RdrName -> SDoc
forall a. Outputable a => a -> SDoc
ppr (Located RdrName -> SDoc)
-> (FieldOcc pass -> Located RdrName) -> FieldOcc pass -> SDoc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FieldOcc pass -> Located RdrName
forall pass. FieldOcc pass -> Located RdrName
rdrNameFieldOcc
mkFieldOcc :: Located RdrName -> FieldOcc GhcPs
mkFieldOcc :: Located RdrName -> FieldOcc GhcPs
mkFieldOcc Located RdrName
rdr = XCFieldOcc GhcPs -> Located RdrName -> FieldOcc GhcPs
forall pass. XCFieldOcc pass -> Located RdrName -> FieldOcc pass
FieldOcc NoExtField
XCFieldOcc GhcPs
noExtField Located RdrName
rdr
data AmbiguousFieldOcc pass
= Unambiguous (XUnambiguous pass) (Located RdrName)
| Ambiguous (XAmbiguous pass) (Located RdrName)
| XAmbiguousFieldOcc !(XXAmbiguousFieldOcc pass)
type instance XUnambiguous GhcPs = NoExtField
type instance XUnambiguous GhcRn = Name
type instance XUnambiguous GhcTc = Id
type instance XAmbiguous GhcPs = NoExtField
type instance XAmbiguous GhcRn = NoExtField
type instance XAmbiguous GhcTc = Id
type instance XXAmbiguousFieldOcc (GhcPass _) = NoExtCon
instance Outputable (AmbiguousFieldOcc (GhcPass p)) where
ppr :: AmbiguousFieldOcc (GhcPass p) -> SDoc
ppr = RdrName -> SDoc
forall a. Outputable a => a -> SDoc
ppr (RdrName -> SDoc)
-> (AmbiguousFieldOcc (GhcPass p) -> RdrName)
-> AmbiguousFieldOcc (GhcPass p)
-> SDoc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AmbiguousFieldOcc (GhcPass p) -> RdrName
forall (p :: Pass). AmbiguousFieldOcc (GhcPass p) -> RdrName
rdrNameAmbiguousFieldOcc
instance OutputableBndr (AmbiguousFieldOcc (GhcPass p)) where
pprInfixOcc :: AmbiguousFieldOcc (GhcPass p) -> SDoc
pprInfixOcc = RdrName -> SDoc
forall a. OutputableBndr a => a -> SDoc
pprInfixOcc (RdrName -> SDoc)
-> (AmbiguousFieldOcc (GhcPass p) -> RdrName)
-> AmbiguousFieldOcc (GhcPass p)
-> SDoc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AmbiguousFieldOcc (GhcPass p) -> RdrName
forall (p :: Pass). AmbiguousFieldOcc (GhcPass p) -> RdrName
rdrNameAmbiguousFieldOcc
pprPrefixOcc :: AmbiguousFieldOcc (GhcPass p) -> SDoc
pprPrefixOcc = RdrName -> SDoc
forall a. OutputableBndr a => a -> SDoc
pprPrefixOcc (RdrName -> SDoc)
-> (AmbiguousFieldOcc (GhcPass p) -> RdrName)
-> AmbiguousFieldOcc (GhcPass p)
-> SDoc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AmbiguousFieldOcc (GhcPass p) -> RdrName
forall (p :: Pass). AmbiguousFieldOcc (GhcPass p) -> RdrName
rdrNameAmbiguousFieldOcc
mkAmbiguousFieldOcc :: Located RdrName -> AmbiguousFieldOcc GhcPs
mkAmbiguousFieldOcc :: Located RdrName -> AmbiguousFieldOcc GhcPs
mkAmbiguousFieldOcc Located RdrName
rdr = XUnambiguous GhcPs -> Located RdrName -> AmbiguousFieldOcc GhcPs
forall pass.
XUnambiguous pass -> Located RdrName -> AmbiguousFieldOcc pass
Unambiguous NoExtField
XUnambiguous GhcPs
noExtField Located RdrName
rdr
rdrNameAmbiguousFieldOcc :: AmbiguousFieldOcc (GhcPass p) -> RdrName
rdrNameAmbiguousFieldOcc :: forall (p :: Pass). AmbiguousFieldOcc (GhcPass p) -> RdrName
rdrNameAmbiguousFieldOcc (Unambiguous XUnambiguous (GhcPass p)
_ (L SrcSpan
_ RdrName
rdr)) = RdrName
rdr
rdrNameAmbiguousFieldOcc (Ambiguous XAmbiguous (GhcPass p)
_ (L SrcSpan
_ RdrName
rdr)) = RdrName
rdr
selectorAmbiguousFieldOcc :: AmbiguousFieldOcc GhcTc -> Id
selectorAmbiguousFieldOcc :: AmbiguousFieldOcc GhcTc -> Id
selectorAmbiguousFieldOcc (Unambiguous XUnambiguous GhcTc
sel Located RdrName
_) = Id
XUnambiguous GhcTc
sel
selectorAmbiguousFieldOcc (Ambiguous XAmbiguous GhcTc
sel Located RdrName
_) = Id
XAmbiguous GhcTc
sel
unambiguousFieldOcc :: AmbiguousFieldOcc GhcTc -> FieldOcc GhcTc
unambiguousFieldOcc :: AmbiguousFieldOcc GhcTc -> FieldOcc GhcTc
unambiguousFieldOcc (Unambiguous XUnambiguous GhcTc
rdr Located RdrName
sel) = XCFieldOcc GhcTc -> Located RdrName -> FieldOcc GhcTc
forall pass. XCFieldOcc pass -> Located RdrName -> FieldOcc pass
FieldOcc XCFieldOcc GhcTc
XUnambiguous GhcTc
rdr Located RdrName
sel
unambiguousFieldOcc (Ambiguous XAmbiguous GhcTc
rdr Located RdrName
sel) = XCFieldOcc GhcTc -> Located RdrName -> FieldOcc GhcTc
forall pass. XCFieldOcc pass -> Located RdrName -> FieldOcc pass
FieldOcc XAmbiguous GhcTc
XCFieldOcc GhcTc
rdr Located RdrName
sel
ambiguousFieldOcc :: FieldOcc GhcTc -> AmbiguousFieldOcc GhcTc
ambiguousFieldOcc :: FieldOcc GhcTc -> AmbiguousFieldOcc GhcTc
ambiguousFieldOcc (FieldOcc XCFieldOcc GhcTc
sel Located RdrName
rdr) = XUnambiguous GhcTc -> Located RdrName -> AmbiguousFieldOcc GhcTc
forall pass.
XUnambiguous pass -> Located RdrName -> AmbiguousFieldOcc pass
Unambiguous XCFieldOcc GhcTc
XUnambiguous GhcTc
sel Located RdrName
rdr
class OutputableBndrFlag flag where
pprTyVarBndr :: OutputableBndrId p => HsTyVarBndr flag (GhcPass p) -> SDoc
instance OutputableBndrFlag () where
pprTyVarBndr :: forall (p :: Pass).
OutputableBndrId p =>
HsTyVarBndr () (GhcPass p) -> SDoc
pprTyVarBndr (UserTyVar XUserTyVar (GhcPass p)
_ ()
_ Located (IdP (GhcPass p))
n) = Located (IdGhcP p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr Located (IdGhcP p)
Located (IdP (GhcPass p))
n
pprTyVarBndr (KindedTyVar XKindedTyVar (GhcPass p)
_ ()
_ Located (IdP (GhcPass p))
n LHsKind (GhcPass p)
k) = SDoc -> SDoc
parens (SDoc -> SDoc) -> SDoc -> SDoc
forall a b. (a -> b) -> a -> b
$ [SDoc] -> SDoc
hsep [Located (IdGhcP p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr Located (IdGhcP p)
Located (IdP (GhcPass p))
n, SDoc
dcolon, LHsKind (GhcPass p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr LHsKind (GhcPass p)
k]
instance OutputableBndrFlag Specificity where
pprTyVarBndr :: forall (p :: Pass).
OutputableBndrId p =>
HsTyVarBndr Specificity (GhcPass p) -> SDoc
pprTyVarBndr (UserTyVar XUserTyVar (GhcPass p)
_ Specificity
SpecifiedSpec Located (IdP (GhcPass p))
n) = Located (IdGhcP p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr Located (IdGhcP p)
Located (IdP (GhcPass p))
n
pprTyVarBndr (UserTyVar XUserTyVar (GhcPass p)
_ Specificity
InferredSpec Located (IdP (GhcPass p))
n) = SDoc -> SDoc
braces (SDoc -> SDoc) -> SDoc -> SDoc
forall a b. (a -> b) -> a -> b
$ Located (IdGhcP p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr Located (IdGhcP p)
Located (IdP (GhcPass p))
n
pprTyVarBndr (KindedTyVar XKindedTyVar (GhcPass p)
_ Specificity
SpecifiedSpec Located (IdP (GhcPass p))
n LHsKind (GhcPass p)
k) = SDoc -> SDoc
parens (SDoc -> SDoc) -> SDoc -> SDoc
forall a b. (a -> b) -> a -> b
$ [SDoc] -> SDoc
hsep [Located (IdGhcP p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr Located (IdGhcP p)
Located (IdP (GhcPass p))
n, SDoc
dcolon, LHsKind (GhcPass p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr LHsKind (GhcPass p)
k]
pprTyVarBndr (KindedTyVar XKindedTyVar (GhcPass p)
_ Specificity
InferredSpec Located (IdP (GhcPass p))
n LHsKind (GhcPass p)
k) = SDoc -> SDoc
braces (SDoc -> SDoc) -> SDoc -> SDoc
forall a b. (a -> b) -> a -> b
$ [SDoc] -> SDoc
hsep [Located (IdGhcP p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr Located (IdGhcP p)
Located (IdP (GhcPass p))
n, SDoc
dcolon, LHsKind (GhcPass p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr LHsKind (GhcPass p)
k]
instance OutputableBndrId p => Outputable (HsType (GhcPass p)) where
ppr :: HsType (GhcPass p) -> SDoc
ppr HsType (GhcPass p)
ty = HsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
HsType (GhcPass p) -> SDoc
pprHsType HsType (GhcPass p)
ty
instance Outputable HsTyLit where
ppr :: HsTyLit -> SDoc
ppr = HsTyLit -> SDoc
ppr_tylit
instance OutputableBndrId p
=> Outputable (LHsQTyVars (GhcPass p)) where
ppr :: LHsQTyVars (GhcPass p) -> SDoc
ppr (HsQTvs { hsq_explicit :: forall pass. LHsQTyVars pass -> [LHsTyVarBndr () pass]
hsq_explicit = [LHsTyVarBndr () (GhcPass p)]
tvs }) = [LHsTyVarBndr () (GhcPass p)] -> SDoc
forall a. Outputable a => [a] -> SDoc
interppSP [LHsTyVarBndr () (GhcPass p)]
tvs
instance OutputableBndrId p
=> Outputable (HsForAllTelescope (GhcPass p)) where
ppr :: HsForAllTelescope (GhcPass p) -> SDoc
ppr (HsForAllVis { hsf_vis_bndrs :: forall pass. HsForAllTelescope pass -> [LHsTyVarBndr () pass]
hsf_vis_bndrs = [LHsTyVarBndr () (GhcPass p)]
bndrs }) =
String -> SDoc
text String
"HsForAllVis:" SDoc -> SDoc -> SDoc
<+> [LHsTyVarBndr () (GhcPass p)] -> SDoc
forall a. Outputable a => a -> SDoc
ppr [LHsTyVarBndr () (GhcPass p)]
bndrs
ppr (HsForAllInvis { hsf_invis_bndrs :: forall pass.
HsForAllTelescope pass -> [LHsTyVarBndr Specificity pass]
hsf_invis_bndrs = [LHsTyVarBndr Specificity (GhcPass p)]
bndrs }) =
String -> SDoc
text String
"HsForAllInvis:" SDoc -> SDoc -> SDoc
<+> [LHsTyVarBndr Specificity (GhcPass p)] -> SDoc
forall a. Outputable a => a -> SDoc
ppr [LHsTyVarBndr Specificity (GhcPass p)]
bndrs
instance (OutputableBndrId p, OutputableBndrFlag flag)
=> Outputable (HsTyVarBndr flag (GhcPass p)) where
ppr :: HsTyVarBndr flag (GhcPass p) -> SDoc
ppr = HsTyVarBndr flag (GhcPass p) -> SDoc
forall flag (p :: Pass).
(OutputableBndrFlag flag, OutputableBndrId p) =>
HsTyVarBndr flag (GhcPass p) -> SDoc
pprTyVarBndr
instance Outputable thing
=> Outputable (HsImplicitBndrs (GhcPass p) thing) where
ppr :: HsImplicitBndrs (GhcPass p) thing -> SDoc
ppr (HsIB { hsib_body :: forall pass thing. HsImplicitBndrs pass thing -> thing
hsib_body = thing
ty }) = thing -> SDoc
forall a. Outputable a => a -> SDoc
ppr thing
ty
instance Outputable thing
=> Outputable (HsWildCardBndrs (GhcPass p) thing) where
ppr :: HsWildCardBndrs (GhcPass p) thing -> SDoc
ppr (HsWC { hswc_body :: forall pass thing. HsWildCardBndrs pass thing -> thing
hswc_body = thing
ty }) = thing -> SDoc
forall a. Outputable a => a -> SDoc
ppr thing
ty
instance OutputableBndrId p
=> Outputable (HsPatSigType (GhcPass p)) where
ppr :: HsPatSigType (GhcPass p) -> SDoc
ppr (HsPS { hsps_body :: forall pass. HsPatSigType pass -> LHsType pass
hsps_body = LHsType (GhcPass p)
ty }) = LHsType (GhcPass p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr LHsType (GhcPass p)
ty
pprAnonWildCard :: SDoc
pprAnonWildCard :: SDoc
pprAnonWildCard = Char -> SDoc
char Char
'_'
pprHsForAll :: forall p. OutputableBndrId p
=> HsForAllTelescope (GhcPass p)
-> LHsContext (GhcPass p) -> SDoc
pprHsForAll :: forall (p :: Pass).
OutputableBndrId p =>
HsForAllTelescope (GhcPass p) -> LHsContext (GhcPass p) -> SDoc
pprHsForAll HsForAllTelescope (GhcPass p)
tele LHsContext (GhcPass p)
cxt
= HsForAllTelescope (GhcPass p) -> SDoc
pp_tele HsForAllTelescope (GhcPass p)
tele SDoc -> SDoc -> SDoc
<+> LHsContext (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsContext (GhcPass p) -> SDoc
pprLHsContext LHsContext (GhcPass p)
cxt
where
pp_tele :: HsForAllTelescope (GhcPass p) -> SDoc
pp_tele :: HsForAllTelescope (GhcPass p) -> SDoc
pp_tele HsForAllTelescope (GhcPass p)
tele = case HsForAllTelescope (GhcPass p)
tele of
HsForAllVis { hsf_vis_bndrs :: forall pass. HsForAllTelescope pass -> [LHsTyVarBndr () pass]
hsf_vis_bndrs = [LHsTyVarBndr () (GhcPass p)]
qtvs } -> SDoc -> [LHsTyVarBndr () (GhcPass p)] -> SDoc
forall flag.
OutputableBndrFlag flag =>
SDoc -> [LHsTyVarBndr flag (GhcPass p)] -> SDoc
pp_forall (SDoc
space SDoc -> SDoc -> SDoc
<> SDoc
arrow) [LHsTyVarBndr () (GhcPass p)]
qtvs
HsForAllInvis { hsf_invis_bndrs :: forall pass.
HsForAllTelescope pass -> [LHsTyVarBndr Specificity pass]
hsf_invis_bndrs = [LHsTyVarBndr Specificity (GhcPass p)]
qtvs } -> SDoc -> [LHsTyVarBndr Specificity (GhcPass p)] -> SDoc
forall flag.
OutputableBndrFlag flag =>
SDoc -> [LHsTyVarBndr flag (GhcPass p)] -> SDoc
pp_forall SDoc
dot [LHsTyVarBndr Specificity (GhcPass p)]
qtvs
pp_forall :: forall flag. OutputableBndrFlag flag =>
SDoc -> [LHsTyVarBndr flag (GhcPass p)] -> SDoc
pp_forall :: forall flag.
OutputableBndrFlag flag =>
SDoc -> [LHsTyVarBndr flag (GhcPass p)] -> SDoc
pp_forall SDoc
separator [LHsTyVarBndr flag (GhcPass p)]
qtvs
| [LHsTyVarBndr flag (GhcPass p)] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [LHsTyVarBndr flag (GhcPass p)]
qtvs = SDoc -> SDoc
whenPprDebug (SDoc
forAllLit SDoc -> SDoc -> SDoc
<> SDoc
separator)
| Bool
otherwise = SDoc
forAllLit SDoc -> SDoc -> SDoc
<+> [LHsTyVarBndr flag (GhcPass p)] -> SDoc
forall a. Outputable a => [a] -> SDoc
interppSP [LHsTyVarBndr flag (GhcPass p)]
qtvs SDoc -> SDoc -> SDoc
<> SDoc
separator
pprHsExplicitForAll :: (OutputableBndrId p)
=> Maybe [LHsTyVarBndr () (GhcPass p)] -> SDoc
pprHsExplicitForAll :: forall (p :: Pass).
OutputableBndrId p =>
Maybe [LHsTyVarBndr () (GhcPass p)] -> SDoc
pprHsExplicitForAll (Just [LHsTyVarBndr () (GhcPass p)]
qtvs) = SDoc
forAllLit SDoc -> SDoc -> SDoc
<+> [LHsTyVarBndr () (GhcPass p)] -> SDoc
forall a. Outputable a => [a] -> SDoc
interppSP [LHsTyVarBndr () (GhcPass p)]
qtvs SDoc -> SDoc -> SDoc
<> SDoc
dot
pprHsExplicitForAll Maybe [LHsTyVarBndr () (GhcPass p)]
Nothing = SDoc
empty
pprLHsContext :: (OutputableBndrId p)
=> LHsContext (GhcPass p) -> SDoc
pprLHsContext :: forall (p :: Pass).
OutputableBndrId p =>
LHsContext (GhcPass p) -> SDoc
pprLHsContext LHsContext (GhcPass p)
lctxt
| [LHsType (GhcPass p)] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (LHsContext (GhcPass p) -> [LHsType (GhcPass p)]
forall l e. GenLocated l e -> e
unLoc LHsContext (GhcPass p)
lctxt) = SDoc
empty
| Bool
otherwise = LHsContext (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsContext (GhcPass p) -> SDoc
pprLHsContextAlways LHsContext (GhcPass p)
lctxt
pprLHsContextAlways :: (OutputableBndrId p)
=> LHsContext (GhcPass p) -> SDoc
pprLHsContextAlways :: forall (p :: Pass).
OutputableBndrId p =>
LHsContext (GhcPass p) -> SDoc
pprLHsContextAlways (L SrcSpan
_ HsContext (GhcPass p)
ctxt)
= case HsContext (GhcPass p)
ctxt of
[] -> SDoc -> SDoc
parens SDoc
empty SDoc -> SDoc -> SDoc
<+> SDoc
darrow
[L SrcSpan
_ HsType (GhcPass p)
ty] -> HsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
HsType (GhcPass p) -> SDoc
ppr_mono_ty HsType (GhcPass p)
ty SDoc -> SDoc -> SDoc
<+> SDoc
darrow
HsContext (GhcPass p)
_ -> SDoc -> SDoc
parens (HsContext (GhcPass p) -> SDoc
forall a. Outputable a => [a] -> SDoc
interpp'SP HsContext (GhcPass p)
ctxt) SDoc -> SDoc -> SDoc
<+> SDoc
darrow
pprConDeclFields :: (OutputableBndrId p)
=> [LConDeclField (GhcPass p)] -> SDoc
pprConDeclFields :: forall (p :: Pass).
OutputableBndrId p =>
[LConDeclField (GhcPass p)] -> SDoc
pprConDeclFields [LConDeclField (GhcPass p)]
fields = SDoc -> SDoc
braces ([SDoc] -> SDoc
sep (SDoc -> [SDoc] -> [SDoc]
punctuate SDoc
comma ((LConDeclField (GhcPass p) -> SDoc)
-> [LConDeclField (GhcPass p)] -> [SDoc]
forall a b. (a -> b) -> [a] -> [b]
map LConDeclField (GhcPass p) -> SDoc
forall {pass} {l}.
(Outputable (XXConDeclField pass), Outputable (HsType pass)) =>
GenLocated l (ConDeclField pass) -> SDoc
ppr_fld [LConDeclField (GhcPass p)]
fields)))
where
ppr_fld :: GenLocated l (ConDeclField pass) -> SDoc
ppr_fld (L l
_ (ConDeclField { cd_fld_names :: forall pass. ConDeclField pass -> [LFieldOcc pass]
cd_fld_names = [LFieldOcc pass]
ns, cd_fld_type :: forall pass. ConDeclField pass -> LBangType pass
cd_fld_type = LBangType pass
ty,
cd_fld_doc :: forall pass. ConDeclField pass -> Maybe LHsDocString
cd_fld_doc = Maybe LHsDocString
doc }))
= [LFieldOcc pass] -> SDoc
forall a. Outputable a => [a] -> SDoc
ppr_names [LFieldOcc pass]
ns SDoc -> SDoc -> SDoc
<+> SDoc
dcolon SDoc -> SDoc -> SDoc
<+> LBangType pass -> SDoc
forall a. Outputable a => a -> SDoc
ppr LBangType pass
ty SDoc -> SDoc -> SDoc
<+> Maybe LHsDocString -> SDoc
ppr_mbDoc Maybe LHsDocString
doc
ppr_fld (L l
_ (XConDeclField XXConDeclField pass
x)) = XXConDeclField pass -> SDoc
forall a. Outputable a => a -> SDoc
ppr XXConDeclField pass
x
ppr_names :: [a] -> SDoc
ppr_names [a
n] = a -> SDoc
forall a. Outputable a => a -> SDoc
ppr a
n
ppr_names [a]
ns = [SDoc] -> SDoc
sep (SDoc -> [SDoc] -> [SDoc]
punctuate SDoc
comma ((a -> SDoc) -> [a] -> [SDoc]
forall a b. (a -> b) -> [a] -> [b]
map a -> SDoc
forall a. Outputable a => a -> SDoc
ppr [a]
ns))
pprHsType :: (OutputableBndrId p) => HsType (GhcPass p) -> SDoc
pprHsType :: forall (p :: Pass).
OutputableBndrId p =>
HsType (GhcPass p) -> SDoc
pprHsType HsType (GhcPass p)
ty = HsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
HsType (GhcPass p) -> SDoc
ppr_mono_ty HsType (GhcPass p)
ty
ppr_mono_lty :: (OutputableBndrId p) => LHsType (GhcPass p) -> SDoc
ppr_mono_lty :: forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty = HsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
HsType (GhcPass p) -> SDoc
ppr_mono_ty (LHsType (GhcPass p) -> HsType (GhcPass p)
forall l e. GenLocated l e -> e
unLoc LHsType (GhcPass p)
ty)
ppr_mono_ty :: (OutputableBndrId p) => HsType (GhcPass p) -> SDoc
ppr_mono_ty :: forall (p :: Pass).
OutputableBndrId p =>
HsType (GhcPass p) -> SDoc
ppr_mono_ty (HsForAllTy { hst_tele :: forall pass. HsType pass -> HsForAllTelescope pass
hst_tele = HsForAllTelescope (GhcPass p)
tele, hst_body :: forall pass. HsType pass -> LHsType pass
hst_body = LHsType (GhcPass p)
ty })
= [SDoc] -> SDoc
sep [HsForAllTelescope (GhcPass p) -> LHsContext (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
HsForAllTelescope (GhcPass p) -> LHsContext (GhcPass p) -> SDoc
pprHsForAll HsForAllTelescope (GhcPass p)
tele LHsContext (GhcPass p)
forall pass. LHsContext pass
noLHsContext, LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty]
ppr_mono_ty (HsQualTy { hst_ctxt :: forall pass. HsType pass -> LHsContext pass
hst_ctxt = LHsContext (GhcPass p)
ctxt, hst_body :: forall pass. HsType pass -> LHsType pass
hst_body = LHsType (GhcPass p)
ty })
= [SDoc] -> SDoc
sep [LHsContext (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsContext (GhcPass p) -> SDoc
pprLHsContextAlways LHsContext (GhcPass p)
ctxt, LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty]
ppr_mono_ty (HsBangTy XBangTy (GhcPass p)
_ HsSrcBang
b LHsType (GhcPass p)
ty) = HsSrcBang -> SDoc
forall a. Outputable a => a -> SDoc
ppr HsSrcBang
b SDoc -> SDoc -> SDoc
<> LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty
ppr_mono_ty (HsRecTy XRecTy (GhcPass p)
_ [LConDeclField (GhcPass p)]
flds) = [LConDeclField (GhcPass p)] -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
[LConDeclField (GhcPass p)] -> SDoc
pprConDeclFields [LConDeclField (GhcPass p)]
flds
ppr_mono_ty (HsTyVar XTyVar (GhcPass p)
_ PromotionFlag
prom (L SrcSpan
_ IdP (GhcPass p)
name))
| PromotionFlag -> Bool
isPromoted PromotionFlag
prom = SDoc -> SDoc
quote (IdGhcP p -> SDoc
forall a. OutputableBndr a => a -> SDoc
pprPrefixOcc IdGhcP p
IdP (GhcPass p)
name)
| Bool
otherwise = IdGhcP p -> SDoc
forall a. OutputableBndr a => a -> SDoc
pprPrefixOcc IdGhcP p
IdP (GhcPass p)
name
ppr_mono_ty (HsFunTy XFunTy (GhcPass p)
_ HsArrow (GhcPass p)
mult LHsType (GhcPass p)
ty1 LHsType (GhcPass p)
ty2) = HsArrow (GhcPass p)
-> LHsType (GhcPass p) -> LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
HsArrow (GhcPass p)
-> LHsType (GhcPass p) -> LHsType (GhcPass p) -> SDoc
ppr_fun_ty HsArrow (GhcPass p)
mult LHsType (GhcPass p)
ty1 LHsType (GhcPass p)
ty2
ppr_mono_ty (HsTupleTy XTupleTy (GhcPass p)
_ HsTupleSort
con [LHsType (GhcPass p)]
tys)
| [LHsType (GhcPass p)
ty] <- [LHsType (GhcPass p)]
tys
, TupleSort
BoxedTuple <- TupleSort
std_con
= [SDoc] -> SDoc
sep [String -> SDoc
text (Boxity -> Int -> String
mkTupleStr Boxity
Boxed Int
1), LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty]
| Bool
otherwise
= TupleSort -> SDoc -> SDoc
tupleParens TupleSort
std_con ((LHsType (GhcPass p) -> SDoc) -> [LHsType (GhcPass p)] -> SDoc
forall a. (a -> SDoc) -> [a] -> SDoc
pprWithCommas LHsType (GhcPass p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr [LHsType (GhcPass p)]
tys)
where std_con :: TupleSort
std_con = case HsTupleSort
con of
HsTupleSort
HsUnboxedTuple -> TupleSort
UnboxedTuple
HsTupleSort
_ -> TupleSort
BoxedTuple
ppr_mono_ty (HsSumTy XSumTy (GhcPass p)
_ [LHsType (GhcPass p)]
tys)
= TupleSort -> SDoc -> SDoc
tupleParens TupleSort
UnboxedTuple ((LHsType (GhcPass p) -> SDoc) -> [LHsType (GhcPass p)] -> SDoc
forall a. (a -> SDoc) -> [a] -> SDoc
pprWithBars LHsType (GhcPass p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr [LHsType (GhcPass p)]
tys)
ppr_mono_ty (HsKindSig XKindSig (GhcPass p)
_ LHsType (GhcPass p)
ty LHsType (GhcPass p)
kind)
= LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty SDoc -> SDoc -> SDoc
<+> SDoc
dcolon SDoc -> SDoc -> SDoc
<+> LHsType (GhcPass p) -> SDoc
forall a. Outputable a => a -> SDoc
ppr LHsType (GhcPass p)
kind
ppr_mono_ty (HsListTy XListTy (GhcPass p)
_ LHsType (GhcPass p)
ty) = SDoc -> SDoc
brackets (LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty)
ppr_mono_ty (HsIParamTy XIParamTy (GhcPass p)
_ Located HsIPName
n LHsType (GhcPass p)
ty) = (Located HsIPName -> SDoc
forall a. Outputable a => a -> SDoc
ppr Located HsIPName
n SDoc -> SDoc -> SDoc
<+> SDoc
dcolon SDoc -> SDoc -> SDoc
<+> LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty)
ppr_mono_ty (HsSpliceTy XSpliceTy (GhcPass p)
_ HsSplice (GhcPass p)
s) = HsSplice (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
HsSplice (GhcPass p) -> SDoc
pprSplice HsSplice (GhcPass p)
s
ppr_mono_ty (HsExplicitListTy XExplicitListTy (GhcPass p)
_ PromotionFlag
prom [LHsType (GhcPass p)]
tys)
| PromotionFlag -> Bool
isPromoted PromotionFlag
prom = SDoc -> SDoc
quote (SDoc -> SDoc) -> SDoc -> SDoc
forall a b. (a -> b) -> a -> b
$ SDoc -> SDoc
brackets ([LHsType (GhcPass p)] -> SDoc -> SDoc
forall pass. [LHsType pass] -> SDoc -> SDoc
maybeAddSpace [LHsType (GhcPass p)]
tys (SDoc -> SDoc) -> SDoc -> SDoc
forall a b. (a -> b) -> a -> b
$ [LHsType (GhcPass p)] -> SDoc
forall a. Outputable a => [a] -> SDoc
interpp'SP [LHsType (GhcPass p)]
tys)
| Bool
otherwise = SDoc -> SDoc
brackets ([LHsType (GhcPass p)] -> SDoc
forall a. Outputable a => [a] -> SDoc
interpp'SP [LHsType (GhcPass p)]
tys)
ppr_mono_ty (HsExplicitTupleTy XExplicitTupleTy (GhcPass p)
_ [LHsType (GhcPass p)]
tys)
| [LHsType (GhcPass p)
ty] <- [LHsType (GhcPass p)]
tys
= SDoc -> SDoc
quote (SDoc -> SDoc) -> SDoc -> SDoc
forall a b. (a -> b) -> a -> b
$ [SDoc] -> SDoc
sep [String -> SDoc
text (Boxity -> Int -> String
mkTupleStr Boxity
Boxed Int
1), LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty]
| Bool
otherwise
= SDoc -> SDoc
quote (SDoc -> SDoc) -> SDoc -> SDoc
forall a b. (a -> b) -> a -> b
$ SDoc -> SDoc
parens ([LHsType (GhcPass p)] -> SDoc -> SDoc
forall pass. [LHsType pass] -> SDoc -> SDoc
maybeAddSpace [LHsType (GhcPass p)]
tys (SDoc -> SDoc) -> SDoc -> SDoc
forall a b. (a -> b) -> a -> b
$ [LHsType (GhcPass p)] -> SDoc
forall a. Outputable a => [a] -> SDoc
interpp'SP [LHsType (GhcPass p)]
tys)
ppr_mono_ty (HsTyLit XTyLit (GhcPass p)
_ HsTyLit
t) = HsTyLit -> SDoc
ppr_tylit HsTyLit
t
ppr_mono_ty (HsWildCardTy {}) = Char -> SDoc
char Char
'_'
ppr_mono_ty (HsStarTy XStarTy (GhcPass p)
_ Bool
isUni) = Char -> SDoc
char (if Bool
isUni then Char
'★' else Char
'*')
ppr_mono_ty (HsAppTy XAppTy (GhcPass p)
_ LHsType (GhcPass p)
fun_ty LHsType (GhcPass p)
arg_ty)
= [SDoc] -> SDoc
hsep [LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
fun_ty, LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
arg_ty]
ppr_mono_ty (HsAppKindTy XAppKindTy (GhcPass p)
_ LHsType (GhcPass p)
ty LHsType (GhcPass p)
k)
= LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty SDoc -> SDoc -> SDoc
<+> Char -> SDoc
char Char
'@' SDoc -> SDoc -> SDoc
<> LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
k
ppr_mono_ty (HsOpTy XOpTy (GhcPass p)
_ LHsType (GhcPass p)
ty1 (L SrcSpan
_ IdP (GhcPass p)
op) LHsType (GhcPass p)
ty2)
= [SDoc] -> SDoc
sep [ LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty1
, [SDoc] -> SDoc
sep [IdGhcP p -> SDoc
forall a. OutputableBndr a => a -> SDoc
pprInfixOcc IdGhcP p
IdP (GhcPass p)
op, LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty2 ] ]
ppr_mono_ty (HsParTy XParTy (GhcPass p)
_ LHsType (GhcPass p)
ty)
= SDoc -> SDoc
parens (LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty)
ppr_mono_ty (HsDocTy XDocTy (GhcPass p)
_ LHsType (GhcPass p)
ty LHsDocString
doc)
= LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty SDoc -> SDoc -> SDoc
<+> HsDocString -> SDoc
forall a. Outputable a => a -> SDoc
ppr (LHsDocString -> HsDocString
forall l e. GenLocated l e -> e
unLoc LHsDocString
doc)
ppr_mono_ty (XHsType XXType (GhcPass p)
t) = NewHsTypeX -> SDoc
forall a. Outputable a => a -> SDoc
ppr XXType (GhcPass p)
NewHsTypeX
t
ppr_fun_ty :: (OutputableBndrId p)
=> HsArrow (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p) -> SDoc
ppr_fun_ty :: forall (p :: Pass).
OutputableBndrId p =>
HsArrow (GhcPass p)
-> LHsType (GhcPass p) -> LHsType (GhcPass p) -> SDoc
ppr_fun_ty HsArrow (GhcPass p)
mult LHsType (GhcPass p)
ty1 LHsType (GhcPass p)
ty2
= let p1 :: SDoc
p1 = LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty1
p2 :: SDoc
p2 = LHsType (GhcPass p) -> SDoc
forall (p :: Pass).
OutputableBndrId p =>
LHsType (GhcPass p) -> SDoc
ppr_mono_lty LHsType (GhcPass p)
ty2
arr :: SDoc
arr = HsArrow (GhcPass p) -> SDoc
forall (pass :: Pass).
OutputableBndrId pass =>
HsArrow (GhcPass pass) -> SDoc
pprHsArrow HsArrow (GhcPass p)
mult
in
[SDoc] -> SDoc
sep [SDoc
p1, SDoc
arr SDoc -> SDoc -> SDoc
<+> SDoc
p2]
ppr_tylit :: HsTyLit -> SDoc
ppr_tylit :: HsTyLit -> SDoc
ppr_tylit (HsNumTy SourceText
source Integer
i) = SourceText -> SDoc -> SDoc
pprWithSourceText SourceText
source (Integer -> SDoc
integer Integer
i)
ppr_tylit (HsStrTy SourceText
source FastString
s) = SourceText -> SDoc -> SDoc
pprWithSourceText SourceText
source (String -> SDoc
text (FastString -> String
forall a. Show a => a -> String
show FastString
s))
hsTypeNeedsParens :: PprPrec -> HsType (GhcPass p) -> Bool
hsTypeNeedsParens :: forall (p :: Pass). PprPrec -> HsType (GhcPass p) -> Bool
hsTypeNeedsParens PprPrec
p = HsType (GhcPass p) -> Bool
go_hs_ty
where
go_hs_ty :: HsType (GhcPass p) -> Bool
go_hs_ty (HsForAllTy{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
>= PprPrec
funPrec
go_hs_ty (HsQualTy{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
>= PprPrec
funPrec
go_hs_ty (HsBangTy{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
> PprPrec
topPrec
go_hs_ty (HsRecTy{}) = Bool
False
go_hs_ty (HsTyVar{}) = Bool
False
go_hs_ty (HsFunTy{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
>= PprPrec
funPrec
go_hs_ty (HsTupleTy{}) = Bool
False
go_hs_ty (HsSumTy{}) = Bool
False
go_hs_ty (HsKindSig{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
>= PprPrec
sigPrec
go_hs_ty (HsListTy{}) = Bool
False
go_hs_ty (HsIParamTy{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
> PprPrec
topPrec
go_hs_ty (HsSpliceTy{}) = Bool
False
go_hs_ty (HsExplicitListTy{}) = Bool
False
go_hs_ty (HsExplicitTupleTy{}) = Bool
False
go_hs_ty (HsTyLit{}) = Bool
False
go_hs_ty (HsWildCardTy{}) = Bool
False
go_hs_ty (HsStarTy{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
>= PprPrec
starPrec
go_hs_ty (HsAppTy{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
>= PprPrec
appPrec
go_hs_ty (HsAppKindTy{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
>= PprPrec
appPrec
go_hs_ty (HsOpTy{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
>= PprPrec
opPrec
go_hs_ty (HsParTy{}) = Bool
False
go_hs_ty (HsDocTy XDocTy (GhcPass p)
_ (L SrcSpan
_ HsType (GhcPass p)
t) LHsDocString
_) = HsType (GhcPass p) -> Bool
go_hs_ty HsType (GhcPass p)
t
go_hs_ty (XHsType (NHsCoreTy Type
ty)) = Type -> Bool
go_core_ty Type
ty
go_core_ty :: Type -> Bool
go_core_ty (TyVarTy{}) = Bool
False
go_core_ty (AppTy{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
>= PprPrec
appPrec
go_core_ty (TyConApp TyCon
_ [Type]
args)
| [Type] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Type]
args = Bool
False
| Bool
otherwise = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
>= PprPrec
appPrec
go_core_ty (ForAllTy{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
>= PprPrec
funPrec
go_core_ty (FunTy{}) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
>= PprPrec
funPrec
go_core_ty (LitTy{}) = Bool
False
go_core_ty (CastTy Type
t KindCoercion
_) = Type -> Bool
go_core_ty Type
t
go_core_ty (CoercionTy{}) = Bool
False
maybeAddSpace :: [LHsType pass] -> SDoc -> SDoc
maybeAddSpace :: forall pass. [LHsType pass] -> SDoc -> SDoc
maybeAddSpace [LHsType pass]
tys SDoc
doc
| (LHsType pass
ty : [LHsType pass]
_) <- [LHsType pass]
tys
, LHsType pass -> Bool
forall p. LHsType p -> Bool
lhsTypeHasLeadingPromotionQuote LHsType pass
ty = SDoc
space SDoc -> SDoc -> SDoc
<> SDoc
doc
| Bool
otherwise = SDoc
doc
lhsTypeHasLeadingPromotionQuote :: LHsType pass -> Bool
lhsTypeHasLeadingPromotionQuote :: forall p. LHsType p -> Bool
lhsTypeHasLeadingPromotionQuote LHsType pass
ty
= LHsType pass -> Bool
forall p. LHsType p -> Bool
goL LHsType pass
ty
where
goL :: GenLocated SrcSpan (HsType pass) -> Bool
goL (L SrcSpan
_ HsType pass
ty) = HsType pass -> Bool
go HsType pass
ty
go :: HsType pass -> Bool
go (HsForAllTy{}) = Bool
False
go (HsQualTy{ hst_ctxt :: forall pass. HsType pass -> LHsContext pass
hst_ctxt = LHsContext pass
ctxt, hst_body :: forall pass. HsType pass -> LHsType pass
hst_body = GenLocated SrcSpan (HsType pass)
body})
| L SrcSpan
_ (GenLocated SrcSpan (HsType pass)
c:[GenLocated SrcSpan (HsType pass)]
_) <- LHsContext pass
ctxt = GenLocated SrcSpan (HsType pass) -> Bool
goL GenLocated SrcSpan (HsType pass)
c
| Bool
otherwise = GenLocated SrcSpan (HsType pass) -> Bool
goL GenLocated SrcSpan (HsType pass)
body
go (HsBangTy{}) = Bool
False
go (HsRecTy{}) = Bool
False
go (HsTyVar XTyVar pass
_ PromotionFlag
p Located (IdP pass)
_) = PromotionFlag -> Bool
isPromoted PromotionFlag
p
go (HsFunTy XFunTy pass
_ HsArrow pass
_ GenLocated SrcSpan (HsType pass)
arg GenLocated SrcSpan (HsType pass)
_) = GenLocated SrcSpan (HsType pass) -> Bool
goL GenLocated SrcSpan (HsType pass)
arg
go (HsListTy{}) = Bool
False
go (HsTupleTy{}) = Bool
False
go (HsSumTy{}) = Bool
False
go (HsOpTy XOpTy pass
_ GenLocated SrcSpan (HsType pass)
t1 Located (IdP pass)
_ GenLocated SrcSpan (HsType pass)
_) = GenLocated SrcSpan (HsType pass) -> Bool
goL GenLocated SrcSpan (HsType pass)
t1
go (HsKindSig XKindSig pass
_ GenLocated SrcSpan (HsType pass)
t GenLocated SrcSpan (HsType pass)
_) = GenLocated SrcSpan (HsType pass) -> Bool
goL GenLocated SrcSpan (HsType pass)
t
go (HsIParamTy{}) = Bool
False
go (HsSpliceTy{}) = Bool
False
go (HsExplicitListTy XExplicitListTy pass
_ PromotionFlag
p [GenLocated SrcSpan (HsType pass)]
_) = PromotionFlag -> Bool
isPromoted PromotionFlag
p
go (HsExplicitTupleTy{}) = Bool
True
go (HsTyLit{}) = Bool
False
go (HsWildCardTy{}) = Bool
False
go (HsStarTy{}) = Bool
False
go (HsAppTy XAppTy pass
_ GenLocated SrcSpan (HsType pass)
t GenLocated SrcSpan (HsType pass)
_) = GenLocated SrcSpan (HsType pass) -> Bool
goL GenLocated SrcSpan (HsType pass)
t
go (HsAppKindTy XAppKindTy pass
_ GenLocated SrcSpan (HsType pass)
t GenLocated SrcSpan (HsType pass)
_) = GenLocated SrcSpan (HsType pass) -> Bool
goL GenLocated SrcSpan (HsType pass)
t
go (HsParTy{}) = Bool
False
go (HsDocTy XDocTy pass
_ GenLocated SrcSpan (HsType pass)
t LHsDocString
_) = GenLocated SrcSpan (HsType pass) -> Bool
goL GenLocated SrcSpan (HsType pass)
t
go (XHsType{}) = Bool
False
parenthesizeHsType :: PprPrec -> LHsType (GhcPass p) -> LHsType (GhcPass p)
parenthesizeHsType :: forall (p :: Pass).
PprPrec -> LHsType (GhcPass p) -> LHsType (GhcPass p)
parenthesizeHsType PprPrec
p lty :: LHsType (GhcPass p)
lty@(L SrcSpan
loc HsType (GhcPass p)
ty)
| PprPrec -> HsType (GhcPass p) -> Bool
forall (p :: Pass). PprPrec -> HsType (GhcPass p) -> Bool
hsTypeNeedsParens PprPrec
p HsType (GhcPass p)
ty = SrcSpan -> HsType (GhcPass p) -> LHsType (GhcPass p)
forall l e. l -> e -> GenLocated l e
L SrcSpan
loc (XParTy (GhcPass p) -> LHsType (GhcPass p) -> HsType (GhcPass p)
forall pass. XParTy pass -> LHsType pass -> HsType pass
HsParTy NoExtField
XParTy (GhcPass p)
noExtField LHsType (GhcPass p)
lty)
| Bool
otherwise = LHsType (GhcPass p)
lty
parenthesizeHsContext :: PprPrec
-> LHsContext (GhcPass p) -> LHsContext (GhcPass p)
parenthesizeHsContext :: forall (p :: Pass).
PprPrec -> LHsContext (GhcPass p) -> LHsContext (GhcPass p)
parenthesizeHsContext PprPrec
p lctxt :: LHsContext (GhcPass p)
lctxt@(L SrcSpan
loc HsContext (GhcPass p)
ctxt) =
case HsContext (GhcPass p)
ctxt of
[LHsType (GhcPass p)
c] -> SrcSpan -> HsContext (GhcPass p) -> LHsContext (GhcPass p)
forall l e. l -> e -> GenLocated l e
L SrcSpan
loc [PprPrec -> LHsType (GhcPass p) -> LHsType (GhcPass p)
forall (p :: Pass).
PprPrec -> LHsType (GhcPass p) -> LHsType (GhcPass p)
parenthesizeHsType PprPrec
p LHsType (GhcPass p)
c]
HsContext (GhcPass p)
_ -> LHsContext (GhcPass p)
lctxt