{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE DataKinds #-}
module Language.Haskell.Syntax.Pat (
Pat(..), LPat,
ConLikeP, isInvisArgPat,
isVisArgPat,
HsConPatDetails, hsConPatArgs, hsConPatTyArgs,
HsConPatTyArg(..), XConPatTyArg,
HsRecFields(..), XHsRecFields, HsFieldBind(..), LHsFieldBind,
HsRecField, LHsRecField,
HsRecUpdField, LHsRecUpdField,
RecFieldsDotDot(..),
hsRecFields, hsRecFieldSel, hsRecFieldsArgs,
) where
import {-# SOURCE #-} Language.Haskell.Syntax.Expr (SyntaxExpr, LHsExpr, HsUntypedSplice)
import Language.Haskell.Syntax.Basic
import Language.Haskell.Syntax.Lit
import Language.Haskell.Syntax.Extension
import Language.Haskell.Syntax.Type
import Data.Maybe
import Data.Functor
import Data.Foldable
import Data.Traversable
import Data.Bool
import Data.Data
import Data.Eq
import Data.Ord
import Data.Int
import Data.Function
import qualified Data.List
import Data.List.NonEmpty (NonEmpty)
type LPat p = XRec p (Pat p)
data Pat p
=
WildPat (XWildPat p)
| VarPat (XVarPat p)
(LIdP p)
| LazyPat (XLazyPat p)
(LPat p)
| AsPat (XAsPat p)
(LIdP p)
(LPat p)
| ParPat (XParPat p)
(LPat p)
| BangPat (XBangPat p)
(LPat p)
| ListPat (XListPat p)
[LPat p]
|
TuplePat (XTuplePat p)
[LPat p]
Boxity
| OrPat (XOrPat p)
(NonEmpty (LPat p))
| SumPat (XSumPat p)
(LPat p)
ConTag
SumWidth
| ConPat {
forall p. Pat p -> XConPat p
pat_con_ext :: XConPat p,
forall p. Pat p -> XRec p (ConLikeP p)
pat_con :: XRec p (ConLikeP p),
forall p. Pat p -> HsConPatDetails p
pat_args :: HsConPatDetails p
}
| ViewPat (XViewPat p)
(LHsExpr p)
(LPat p)
| SplicePat (XSplicePat p)
(HsUntypedSplice p)
| LitPat (XLitPat p)
(HsLit p)
| NPat (XNPat p)
(XRec p (HsOverLit p))
(Maybe (SyntaxExpr p))
(SyntaxExpr p)
|
NPlusKPat (XNPlusKPat p)
(LIdP p)
(XRec p (HsOverLit p))
(HsOverLit p)
(SyntaxExpr p)
(SyntaxExpr p)
| SigPat (XSigPat p)
(LPat p)
(HsPatSigType (NoGhcTc p))
|
EmbTyPat (XEmbTyPat p)
(HsTyPat (NoGhcTc p))
| InvisPat (XInvisPat p) (HsTyPat (NoGhcTc p))
|
XPat !(XXPat p)
type family ConLikeP x
data HsConPatTyArg p = HsConPatTyArg !(XConPatTyArg p) (HsTyPat p)
type family XConPatTyArg p
isInvisArgPat :: Pat p -> Bool
isInvisArgPat :: forall p. Pat p -> Bool
isInvisArgPat InvisPat{} = Bool
True
isInvisArgPat Pat p
_ = Bool
False
isVisArgPat :: Pat p -> Bool
isVisArgPat :: forall p. Pat p -> Bool
isVisArgPat = Bool -> Bool
not (Bool -> Bool) -> (Pat p -> Bool) -> Pat p -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Pat p -> Bool
forall p. Pat p -> Bool
isInvisArgPat
type HsConPatDetails p = HsConDetails (HsConPatTyArg (NoGhcTc p)) (LPat p) (HsRecFields p (LPat p))
hsConPatArgs :: forall p . (UnXRec p) => HsConPatDetails p -> [LPat p]
hsConPatArgs :: forall p. UnXRec p => HsConPatDetails p -> [LPat p]
hsConPatArgs (PrefixCon [HsConPatTyArg (NoGhcTc p)]
_ [LPat p]
ps) = [LPat p]
ps
hsConPatArgs (RecCon HsRecFields p (LPat p)
fs) = (XRec p (HsFieldBind (XRec p (FieldOcc p)) (LPat p)) -> LPat p)
-> [XRec p (HsFieldBind (XRec p (FieldOcc p)) (LPat p))]
-> [LPat p]
forall a b. (a -> b) -> [a] -> [b]
Data.List.map (HsFieldBind (XRec p (FieldOcc p)) (LPat p) -> LPat p
forall lhs rhs. HsFieldBind lhs rhs -> rhs
hfbRHS (HsFieldBind (XRec p (FieldOcc p)) (LPat p) -> LPat p)
-> (XRec p (HsFieldBind (XRec p (FieldOcc p)) (LPat p))
-> HsFieldBind (XRec p (FieldOcc p)) (LPat p))
-> XRec p (HsFieldBind (XRec p (FieldOcc p)) (LPat p))
-> LPat p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall p a. UnXRec p => XRec p a -> a
unXRec @p) (HsRecFields p (LPat p)
-> [XRec p (HsFieldBind (XRec p (FieldOcc p)) (LPat p))]
forall p arg. HsRecFields p arg -> [LHsRecField p arg]
rec_flds HsRecFields p (LPat p)
fs)
hsConPatArgs (InfixCon LPat p
p1 LPat p
p2) = [LPat p
p1,LPat p
p2]
hsConPatTyArgs :: forall p. HsConPatDetails p -> [HsConPatTyArg (NoGhcTc p)]
hsConPatTyArgs :: forall p. HsConPatDetails p -> [HsConPatTyArg (NoGhcTc p)]
hsConPatTyArgs (PrefixCon [HsConPatTyArg (NoGhcTc p)]
tyargs [LPat p]
_) = [HsConPatTyArg (NoGhcTc p)]
tyargs
hsConPatTyArgs (RecCon HsRecFields p (LPat p)
_) = []
hsConPatTyArgs (InfixCon LPat p
_ LPat p
_) = []
data HsRecFields p arg
= HsRecFields { forall p arg. HsRecFields p arg -> XHsRecFields p
rec_ext :: !(XHsRecFields p),
forall p arg. HsRecFields p arg -> [LHsRecField p arg]
rec_flds :: [LHsRecField p arg],
forall p arg. HsRecFields p arg -> Maybe (XRec p RecFieldsDotDot)
rec_dotdot :: Maybe (XRec p RecFieldsDotDot) }
type family XHsRecFields p
newtype RecFieldsDotDot = RecFieldsDotDot { RecFieldsDotDot -> Int
unRecFieldsDotDot :: Int }
deriving (Typeable RecFieldsDotDot
Typeable RecFieldsDotDot =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RecFieldsDotDot -> c RecFieldsDotDot)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RecFieldsDotDot)
-> (RecFieldsDotDot -> Constr)
-> (RecFieldsDotDot -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RecFieldsDotDot))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c RecFieldsDotDot))
-> ((forall b. Data b => b -> b)
-> RecFieldsDotDot -> RecFieldsDotDot)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> RecFieldsDotDot -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> RecFieldsDotDot -> r)
-> (forall u.
(forall d. Data d => d -> u) -> RecFieldsDotDot -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> RecFieldsDotDot -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> RecFieldsDotDot -> m RecFieldsDotDot)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RecFieldsDotDot -> m RecFieldsDotDot)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RecFieldsDotDot -> m RecFieldsDotDot)
-> Data RecFieldsDotDot
RecFieldsDotDot -> Constr
RecFieldsDotDot -> DataType
(forall b. Data b => b -> b) -> RecFieldsDotDot -> RecFieldsDotDot
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) -> RecFieldsDotDot -> u
forall u. (forall d. Data d => d -> u) -> RecFieldsDotDot -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> RecFieldsDotDot -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> RecFieldsDotDot -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> RecFieldsDotDot -> m RecFieldsDotDot
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RecFieldsDotDot -> m RecFieldsDotDot
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RecFieldsDotDot
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RecFieldsDotDot -> c RecFieldsDotDot
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RecFieldsDotDot)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c RecFieldsDotDot)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RecFieldsDotDot -> c RecFieldsDotDot
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RecFieldsDotDot -> c RecFieldsDotDot
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RecFieldsDotDot
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RecFieldsDotDot
$ctoConstr :: RecFieldsDotDot -> Constr
toConstr :: RecFieldsDotDot -> Constr
$cdataTypeOf :: RecFieldsDotDot -> DataType
dataTypeOf :: RecFieldsDotDot -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RecFieldsDotDot)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RecFieldsDotDot)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c RecFieldsDotDot)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c RecFieldsDotDot)
$cgmapT :: (forall b. Data b => b -> b) -> RecFieldsDotDot -> RecFieldsDotDot
gmapT :: (forall b. Data b => b -> b) -> RecFieldsDotDot -> RecFieldsDotDot
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> RecFieldsDotDot -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> RecFieldsDotDot -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> RecFieldsDotDot -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> RecFieldsDotDot -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> RecFieldsDotDot -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> RecFieldsDotDot -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> RecFieldsDotDot -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> RecFieldsDotDot -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> RecFieldsDotDot -> m RecFieldsDotDot
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> RecFieldsDotDot -> m RecFieldsDotDot
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RecFieldsDotDot -> m RecFieldsDotDot
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RecFieldsDotDot -> m RecFieldsDotDot
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RecFieldsDotDot -> m RecFieldsDotDot
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RecFieldsDotDot -> m RecFieldsDotDot
Data, RecFieldsDotDot -> RecFieldsDotDot -> Bool
(RecFieldsDotDot -> RecFieldsDotDot -> Bool)
-> (RecFieldsDotDot -> RecFieldsDotDot -> Bool)
-> Eq RecFieldsDotDot
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RecFieldsDotDot -> RecFieldsDotDot -> Bool
== :: RecFieldsDotDot -> RecFieldsDotDot -> Bool
$c/= :: RecFieldsDotDot -> RecFieldsDotDot -> Bool
/= :: RecFieldsDotDot -> RecFieldsDotDot -> Bool
Eq, Eq RecFieldsDotDot
Eq RecFieldsDotDot =>
(RecFieldsDotDot -> RecFieldsDotDot -> Ordering)
-> (RecFieldsDotDot -> RecFieldsDotDot -> Bool)
-> (RecFieldsDotDot -> RecFieldsDotDot -> Bool)
-> (RecFieldsDotDot -> RecFieldsDotDot -> Bool)
-> (RecFieldsDotDot -> RecFieldsDotDot -> Bool)
-> (RecFieldsDotDot -> RecFieldsDotDot -> RecFieldsDotDot)
-> (RecFieldsDotDot -> RecFieldsDotDot -> RecFieldsDotDot)
-> Ord RecFieldsDotDot
RecFieldsDotDot -> RecFieldsDotDot -> Bool
RecFieldsDotDot -> RecFieldsDotDot -> Ordering
RecFieldsDotDot -> RecFieldsDotDot -> RecFieldsDotDot
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: RecFieldsDotDot -> RecFieldsDotDot -> Ordering
compare :: RecFieldsDotDot -> RecFieldsDotDot -> Ordering
$c< :: RecFieldsDotDot -> RecFieldsDotDot -> Bool
< :: RecFieldsDotDot -> RecFieldsDotDot -> Bool
$c<= :: RecFieldsDotDot -> RecFieldsDotDot -> Bool
<= :: RecFieldsDotDot -> RecFieldsDotDot -> Bool
$c> :: RecFieldsDotDot -> RecFieldsDotDot -> Bool
> :: RecFieldsDotDot -> RecFieldsDotDot -> Bool
$c>= :: RecFieldsDotDot -> RecFieldsDotDot -> Bool
>= :: RecFieldsDotDot -> RecFieldsDotDot -> Bool
$cmax :: RecFieldsDotDot -> RecFieldsDotDot -> RecFieldsDotDot
max :: RecFieldsDotDot -> RecFieldsDotDot -> RecFieldsDotDot
$cmin :: RecFieldsDotDot -> RecFieldsDotDot -> RecFieldsDotDot
min :: RecFieldsDotDot -> RecFieldsDotDot -> RecFieldsDotDot
Ord)
type LHsFieldBind p id arg = XRec p (HsFieldBind id arg)
type LHsRecField p arg = XRec p (HsRecField p arg)
type LHsRecUpdField p q = XRec p (HsRecUpdField p q)
type HsRecField p arg = HsFieldBind (LFieldOcc p) arg
type HsRecUpdField p q = HsFieldBind (LAmbiguousFieldOcc p) (LHsExpr q)
data HsFieldBind lhs rhs = HsFieldBind {
forall lhs rhs. HsFieldBind lhs rhs -> XHsFieldBind lhs
hfbAnn :: XHsFieldBind lhs,
forall lhs rhs. HsFieldBind lhs rhs -> lhs
hfbLHS :: lhs,
forall lhs rhs. HsFieldBind lhs rhs -> rhs
hfbRHS :: rhs,
forall lhs rhs. HsFieldBind lhs rhs -> Bool
hfbPun :: Bool
} deriving ((forall a b. (a -> b) -> HsFieldBind lhs a -> HsFieldBind lhs b)
-> (forall a b. a -> HsFieldBind lhs b -> HsFieldBind lhs a)
-> Functor (HsFieldBind lhs)
forall a b. a -> HsFieldBind lhs b -> HsFieldBind lhs a
forall a b. (a -> b) -> HsFieldBind lhs a -> HsFieldBind lhs b
forall lhs a b. a -> HsFieldBind lhs b -> HsFieldBind lhs a
forall lhs a b. (a -> b) -> HsFieldBind lhs a -> HsFieldBind lhs b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall lhs a b. (a -> b) -> HsFieldBind lhs a -> HsFieldBind lhs b
fmap :: forall a b. (a -> b) -> HsFieldBind lhs a -> HsFieldBind lhs b
$c<$ :: forall lhs a b. a -> HsFieldBind lhs b -> HsFieldBind lhs a
<$ :: forall a b. a -> HsFieldBind lhs b -> HsFieldBind lhs a
Functor, (forall m. Monoid m => HsFieldBind lhs m -> m)
-> (forall m a. Monoid m => (a -> m) -> HsFieldBind lhs a -> m)
-> (forall m a. Monoid m => (a -> m) -> HsFieldBind lhs a -> m)
-> (forall a b. (a -> b -> b) -> b -> HsFieldBind lhs a -> b)
-> (forall a b. (a -> b -> b) -> b -> HsFieldBind lhs a -> b)
-> (forall b a. (b -> a -> b) -> b -> HsFieldBind lhs a -> b)
-> (forall b a. (b -> a -> b) -> b -> HsFieldBind lhs a -> b)
-> (forall a. (a -> a -> a) -> HsFieldBind lhs a -> a)
-> (forall a. (a -> a -> a) -> HsFieldBind lhs a -> a)
-> (forall a. HsFieldBind lhs a -> [a])
-> (forall a. HsFieldBind lhs a -> Bool)
-> (forall a. HsFieldBind lhs a -> Int)
-> (forall a. Eq a => a -> HsFieldBind lhs a -> Bool)
-> (forall a. Ord a => HsFieldBind lhs a -> a)
-> (forall a. Ord a => HsFieldBind lhs a -> a)
-> (forall a. Num a => HsFieldBind lhs a -> a)
-> (forall a. Num a => HsFieldBind lhs a -> a)
-> Foldable (HsFieldBind lhs)
forall a. Eq a => a -> HsFieldBind lhs a -> Bool
forall a. Num a => HsFieldBind lhs a -> a
forall a. Ord a => HsFieldBind lhs a -> a
forall m. Monoid m => HsFieldBind lhs m -> m
forall a. HsFieldBind lhs a -> Bool
forall a. HsFieldBind lhs a -> Int
forall a. HsFieldBind lhs a -> [a]
forall a. (a -> a -> a) -> HsFieldBind lhs a -> a
forall lhs a. Eq a => a -> HsFieldBind lhs a -> Bool
forall lhs a. Num a => HsFieldBind lhs a -> a
forall lhs a. Ord a => HsFieldBind lhs a -> a
forall lhs m. Monoid m => HsFieldBind lhs m -> m
forall m a. Monoid m => (a -> m) -> HsFieldBind lhs a -> m
forall lhs rhs. HsFieldBind lhs rhs -> Bool
forall lhs a. HsFieldBind lhs a -> Int
forall lhs a. HsFieldBind lhs a -> [a]
forall b a. (b -> a -> b) -> b -> HsFieldBind lhs a -> b
forall a b. (a -> b -> b) -> b -> HsFieldBind lhs a -> b
forall lhs a. (a -> a -> a) -> HsFieldBind lhs a -> a
forall lhs m a. Monoid m => (a -> m) -> HsFieldBind lhs a -> m
forall lhs b a. (b -> a -> b) -> b -> HsFieldBind lhs a -> b
forall lhs a b. (a -> b -> b) -> b -> HsFieldBind lhs a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
$cfold :: forall lhs m. Monoid m => HsFieldBind lhs m -> m
fold :: forall m. Monoid m => HsFieldBind lhs m -> m
$cfoldMap :: forall lhs m a. Monoid m => (a -> m) -> HsFieldBind lhs a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> HsFieldBind lhs a -> m
$cfoldMap' :: forall lhs m a. Monoid m => (a -> m) -> HsFieldBind lhs a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> HsFieldBind lhs a -> m
$cfoldr :: forall lhs a b. (a -> b -> b) -> b -> HsFieldBind lhs a -> b
foldr :: forall a b. (a -> b -> b) -> b -> HsFieldBind lhs a -> b
$cfoldr' :: forall lhs a b. (a -> b -> b) -> b -> HsFieldBind lhs a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> HsFieldBind lhs a -> b
$cfoldl :: forall lhs b a. (b -> a -> b) -> b -> HsFieldBind lhs a -> b
foldl :: forall b a. (b -> a -> b) -> b -> HsFieldBind lhs a -> b
$cfoldl' :: forall lhs b a. (b -> a -> b) -> b -> HsFieldBind lhs a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> HsFieldBind lhs a -> b
$cfoldr1 :: forall lhs a. (a -> a -> a) -> HsFieldBind lhs a -> a
foldr1 :: forall a. (a -> a -> a) -> HsFieldBind lhs a -> a
$cfoldl1 :: forall lhs a. (a -> a -> a) -> HsFieldBind lhs a -> a
foldl1 :: forall a. (a -> a -> a) -> HsFieldBind lhs a -> a
$ctoList :: forall lhs a. HsFieldBind lhs a -> [a]
toList :: forall a. HsFieldBind lhs a -> [a]
$cnull :: forall lhs rhs. HsFieldBind lhs rhs -> Bool
null :: forall a. HsFieldBind lhs a -> Bool
$clength :: forall lhs a. HsFieldBind lhs a -> Int
length :: forall a. HsFieldBind lhs a -> Int
$celem :: forall lhs a. Eq a => a -> HsFieldBind lhs a -> Bool
elem :: forall a. Eq a => a -> HsFieldBind lhs a -> Bool
$cmaximum :: forall lhs a. Ord a => HsFieldBind lhs a -> a
maximum :: forall a. Ord a => HsFieldBind lhs a -> a
$cminimum :: forall lhs a. Ord a => HsFieldBind lhs a -> a
minimum :: forall a. Ord a => HsFieldBind lhs a -> a
$csum :: forall lhs a. Num a => HsFieldBind lhs a -> a
sum :: forall a. Num a => HsFieldBind lhs a -> a
$cproduct :: forall lhs a. Num a => HsFieldBind lhs a -> a
product :: forall a. Num a => HsFieldBind lhs a -> a
Foldable, Functor (HsFieldBind lhs)
Foldable (HsFieldBind lhs)
(Functor (HsFieldBind lhs), Foldable (HsFieldBind lhs)) =>
(forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> HsFieldBind lhs a -> f (HsFieldBind lhs b))
-> (forall (f :: * -> *) a.
Applicative f =>
HsFieldBind lhs (f a) -> f (HsFieldBind lhs a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> HsFieldBind lhs a -> m (HsFieldBind lhs b))
-> (forall (m :: * -> *) a.
Monad m =>
HsFieldBind lhs (m a) -> m (HsFieldBind lhs a))
-> Traversable (HsFieldBind lhs)
forall lhs. Functor (HsFieldBind lhs)
forall lhs. Foldable (HsFieldBind lhs)
forall lhs (m :: * -> *) a.
Monad m =>
HsFieldBind lhs (m a) -> m (HsFieldBind lhs a)
forall lhs (f :: * -> *) a.
Applicative f =>
HsFieldBind lhs (f a) -> f (HsFieldBind lhs a)
forall lhs (m :: * -> *) a b.
Monad m =>
(a -> m b) -> HsFieldBind lhs a -> m (HsFieldBind lhs b)
forall lhs (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> HsFieldBind lhs a -> f (HsFieldBind lhs b)
forall (t :: * -> *).
(Functor t, Foldable t) =>
(forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a.
Monad m =>
HsFieldBind lhs (m a) -> m (HsFieldBind lhs a)
forall (f :: * -> *) a.
Applicative f =>
HsFieldBind lhs (f a) -> f (HsFieldBind lhs a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> HsFieldBind lhs a -> m (HsFieldBind lhs b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> HsFieldBind lhs a -> f (HsFieldBind lhs b)
$ctraverse :: forall lhs (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> HsFieldBind lhs a -> f (HsFieldBind lhs b)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> HsFieldBind lhs a -> f (HsFieldBind lhs b)
$csequenceA :: forall lhs (f :: * -> *) a.
Applicative f =>
HsFieldBind lhs (f a) -> f (HsFieldBind lhs a)
sequenceA :: forall (f :: * -> *) a.
Applicative f =>
HsFieldBind lhs (f a) -> f (HsFieldBind lhs a)
$cmapM :: forall lhs (m :: * -> *) a b.
Monad m =>
(a -> m b) -> HsFieldBind lhs a -> m (HsFieldBind lhs b)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> HsFieldBind lhs a -> m (HsFieldBind lhs b)
$csequence :: forall lhs (m :: * -> *) a.
Monad m =>
HsFieldBind lhs (m a) -> m (HsFieldBind lhs a)
sequence :: forall (m :: * -> *) a.
Monad m =>
HsFieldBind lhs (m a) -> m (HsFieldBind lhs a)
Traversable)
hsRecFields :: forall p arg.UnXRec p => HsRecFields p arg -> [XCFieldOcc p]
hsRecFields :: forall p arg. UnXRec p => HsRecFields p arg -> [XCFieldOcc p]
hsRecFields HsRecFields p arg
rbinds = (XRec p (HsFieldBind (XRec p (FieldOcc p)) arg) -> XCFieldOcc p)
-> [XRec p (HsFieldBind (XRec p (FieldOcc p)) arg)]
-> [XCFieldOcc p]
forall a b. (a -> b) -> [a] -> [b]
Data.List.map (HsFieldBind (XRec p (FieldOcc p)) arg -> XCFieldOcc p
forall p arg. UnXRec p => HsRecField p arg -> XCFieldOcc p
hsRecFieldSel (HsFieldBind (XRec p (FieldOcc p)) arg -> XCFieldOcc p)
-> (XRec p (HsFieldBind (XRec p (FieldOcc p)) arg)
-> HsFieldBind (XRec p (FieldOcc p)) arg)
-> XRec p (HsFieldBind (XRec p (FieldOcc p)) arg)
-> XCFieldOcc p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall p a. UnXRec p => XRec p a -> a
unXRec @p) (HsRecFields p arg
-> [XRec p (HsFieldBind (XRec p (FieldOcc p)) arg)]
forall p arg. HsRecFields p arg -> [LHsRecField p arg]
rec_flds HsRecFields p arg
rbinds)
hsRecFieldsArgs :: forall p arg. UnXRec p => HsRecFields p arg -> [arg]
hsRecFieldsArgs :: forall p arg. UnXRec p => HsRecFields p arg -> [arg]
hsRecFieldsArgs HsRecFields p arg
rbinds = (XRec p (HsFieldBind (XRec p (FieldOcc p)) arg) -> arg)
-> [XRec p (HsFieldBind (XRec p (FieldOcc p)) arg)] -> [arg]
forall a b. (a -> b) -> [a] -> [b]
Data.List.map (HsFieldBind (XRec p (FieldOcc p)) arg -> arg
forall lhs rhs. HsFieldBind lhs rhs -> rhs
hfbRHS (HsFieldBind (XRec p (FieldOcc p)) arg -> arg)
-> (XRec p (HsFieldBind (XRec p (FieldOcc p)) arg)
-> HsFieldBind (XRec p (FieldOcc p)) arg)
-> XRec p (HsFieldBind (XRec p (FieldOcc p)) arg)
-> arg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall p a. UnXRec p => XRec p a -> a
unXRec @p) (HsRecFields p arg
-> [XRec p (HsFieldBind (XRec p (FieldOcc p)) arg)]
forall p arg. HsRecFields p arg -> [LHsRecField p arg]
rec_flds HsRecFields p arg
rbinds)
hsRecFieldSel :: forall p arg. UnXRec p => HsRecField p arg -> XCFieldOcc p
hsRecFieldSel :: forall p arg. UnXRec p => HsRecField p arg -> XCFieldOcc p
hsRecFieldSel = FieldOcc p -> XCFieldOcc p
forall pass. FieldOcc pass -> XCFieldOcc pass
foExt (FieldOcc p -> XCFieldOcc p)
-> (HsFieldBind (XRec p (FieldOcc p)) arg -> FieldOcc p)
-> HsFieldBind (XRec p (FieldOcc p)) arg
-> XCFieldOcc p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall p a. UnXRec p => XRec p a -> a
unXRec @p (XRec p (FieldOcc p) -> FieldOcc p)
-> (HsFieldBind (XRec p (FieldOcc p)) arg -> XRec p (FieldOcc p))
-> HsFieldBind (XRec p (FieldOcc p)) arg
-> FieldOcc p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HsFieldBind (XRec p (FieldOcc p)) arg -> XRec p (FieldOcc p)
forall lhs rhs. HsFieldBind lhs rhs -> lhs
hfbLHS