{-# LANGUAGE Safe #-}
module Cryptol.Parser.Names
( tnamesNT
, tnamesT
, tnamesC
, namesD
, tnamesD
, namesB
, namesP
, namesNT
, boundNames
, boundNamesSet
) where
import Cryptol.Parser.AST
import Cryptol.Utils.RecordMap
import Data.Set (Set)
import qualified Data.Set as Set
tnamesNT :: Newtype name -> ([Located name], ())
tnamesNT :: forall name. Newtype name -> ([Located name], ())
tnamesNT Newtype name
x = ([ forall name. Newtype name -> Located name
nName Newtype name
x ], ())
namesNT :: Newtype name -> ([Located name], ())
namesNT :: forall name. Newtype name -> ([Located name], ())
namesNT Newtype name
x = ([ (forall name. Newtype name -> Located name
nName Newtype name
x) { thing :: name
thing = forall name. Newtype name -> name
nConName Newtype name
x } ], ())
namesDs :: Ord name => [Decl name] -> ([Located name], Set name)
namesDs :: forall name. Ord name => [Decl name] -> ([Located name], Set name)
namesDs [Decl name]
ds = ([Located name]
defs, forall name. Ord name => [Located name] -> Set name -> Set name
boundLNames [Located name]
defs (forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Set name]
frees))
where
defs :: [Located name]
defs = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Located name]]
defss
([[Located name]]
defss,[Set name]
frees) = forall a b. [(a, b)] -> ([a], [b])
unzip (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Decl name -> ([Located name], Set name)
namesD [Decl name]
ds)
namesD :: Ord name => Decl name -> ([Located name], Set name)
namesD :: forall name. Ord name => Decl name -> ([Located name], Set name)
namesD Decl name
decl =
case Decl name
decl of
DBind Bind name
b -> forall name. Ord name => Bind name -> ([Located name], Set name)
namesB Bind name
b
DRec [Bind name]
bs -> let ([[Located name]]
xs,[Set name]
ys) = forall a b. [(a, b)] -> ([a], [b])
unzip (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Bind name -> ([Located name], Set name)
namesB [Bind name]
bs)
in (forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Located name]]
xs, forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Set name]
ys)
DPatBind Pattern name
p Expr name
e -> (forall name. Pattern name -> [Located name]
namesP Pattern name
p, forall name. Ord name => Expr name -> Set name
namesE Expr name
e)
DSignature {} -> ([],forall a. Set a
Set.empty)
DFixity{} -> ([],forall a. Set a
Set.empty)
DPragma {} -> ([],forall a. Set a
Set.empty)
DType {} -> ([],forall a. Set a
Set.empty)
DProp {} -> ([],forall a. Set a
Set.empty)
DLocated Decl name
d Range
_ -> forall name. Ord name => Decl name -> ([Located name], Set name)
namesD Decl name
d
namesB :: Ord name => Bind name -> ([Located name], Set name)
namesB :: forall name. Ord name => Bind name -> ([Located name], Set name)
namesB Bind name
b =
([forall name. Bind name -> Located name
bName Bind name
b], forall name. Ord name => [Located name] -> Set name -> Set name
boundLNames (forall name. [Pattern name] -> [Located name]
namesPs (forall name. Bind name -> [Pattern name]
bParams Bind name
b)) (forall name. Ord name => BindDef name -> Set name
namesDef (forall a. Located a -> a
thing (forall name. Bind name -> Located (BindDef name)
bDef Bind name
b))))
namesDef :: Ord name => BindDef name -> Set name
namesDef :: forall name. Ord name => BindDef name -> Set name
namesDef BindDef name
DPrim = forall a. Set a
Set.empty
namesDef BindDef name
DForeign = forall a. Set a
Set.empty
namesDef (DExpr Expr name
e) = forall name. Ord name => Expr name -> Set name
namesE Expr name
e
namesDef (DPropGuards [PropGuardCase name]
guards) = forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map (forall name. Ord name => Expr name -> Set name
namesE forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall name. PropGuardCase name -> Expr name
pgcExpr) [PropGuardCase name]
guards)
namesE :: Ord name => Expr name -> Set name
namesE :: forall name. Ord name => Expr name -> Set name
namesE Expr name
expr =
case Expr name
expr of
EVar name
x -> forall a. a -> Set a
Set.singleton name
x
ELit Literal
_ -> forall a. Set a
Set.empty
EGenerate Expr name
e -> forall name. Ord name => Expr name -> Set name
namesE Expr name
e
ETuple [Expr name]
es -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Expr name -> Set name
namesE [Expr name]
es)
ERecord Rec (Expr name)
fs -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map (forall name. Ord name => Expr name -> Set name
namesE forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> b
snd) (forall a b. RecordMap a b -> [b]
recordElements Rec (Expr name)
fs))
ESel Expr name
e Selector
_ -> forall name. Ord name => Expr name -> Set name
namesE Expr name
e
EUpd Maybe (Expr name)
mb [UpdField name]
fs -> let e :: Set name
e = forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Set a
Set.empty forall name. Ord name => Expr name -> Set name
namesE Maybe (Expr name)
mb
in forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (Set name
e forall a. a -> [a] -> [a]
: forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => UpdField name -> Set name
namesUF [UpdField name]
fs)
EList [Expr name]
es -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Expr name -> Set name
namesE [Expr name]
es)
EFromTo{} -> forall a. Set a
Set.empty
EFromToBy{} -> forall a. Set a
Set.empty
EFromToDownBy{} -> forall a. Set a
Set.empty
EFromToLessThan{} -> forall a. Set a
Set.empty
EInfFrom Expr name
e Maybe (Expr name)
e' -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
namesE Expr name
e) (forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Set a
Set.empty forall name. Ord name => Expr name -> Set name
namesE Maybe (Expr name)
e')
EComp Expr name
e [[Match name]]
arms -> let ([[Located name]]
dss,[Set name]
uss) = forall a b. [(a, b)] -> ([a], [b])
unzip (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => [Match name] -> ([Located name], Set name)
namesArm [[Match name]]
arms)
in forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => [Located name] -> Set name -> Set name
boundLNames (forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Located name]]
dss) (forall name. Ord name => Expr name -> Set name
namesE Expr name
e))
(forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Set name]
uss)
EApp Expr name
e1 Expr name
e2 -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
namesE Expr name
e1) (forall name. Ord name => Expr name -> Set name
namesE Expr name
e2)
EAppT Expr name
e [TypeInst name]
_ -> forall name. Ord name => Expr name -> Set name
namesE Expr name
e
EIf Expr name
e1 Expr name
e2 Expr name
e3 -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
namesE Expr name
e1) (forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
namesE Expr name
e2) (forall name. Ord name => Expr name -> Set name
namesE Expr name
e3))
EWhere Expr name
e [Decl name]
ds -> let ([Located name]
bs,Set name
xs) = forall name. Ord name => [Decl name] -> ([Located name], Set name)
namesDs [Decl name]
ds
in forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => [Located name] -> Set name -> Set name
boundLNames [Located name]
bs (forall name. Ord name => Expr name -> Set name
namesE Expr name
e)) Set name
xs
ETyped Expr name
e Type name
_ -> forall name. Ord name => Expr name -> Set name
namesE Expr name
e
ETypeVal Type name
_ -> forall a. Set a
Set.empty
EFun FunDesc name
_ [Pattern name]
ps Expr name
e -> forall name. Ord name => [Located name] -> Set name -> Set name
boundLNames (forall name. [Pattern name] -> [Located name]
namesPs [Pattern name]
ps) (forall name. Ord name => Expr name -> Set name
namesE Expr name
e)
ELocated Expr name
e Range
_ -> forall name. Ord name => Expr name -> Set name
namesE Expr name
e
ESplit Expr name
e -> forall name. Ord name => Expr name -> Set name
namesE Expr name
e
EParens Expr name
e -> forall name. Ord name => Expr name -> Set name
namesE Expr name
e
EInfix Expr name
a Located name
o Fixity
_ Expr name
b-> forall a. Ord a => a -> Set a -> Set a
Set.insert (forall a. Located a -> a
thing Located name
o) (forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
namesE Expr name
a) (forall name. Ord name => Expr name -> Set name
namesE Expr name
b))
EPrefix PrefixOp
_ Expr name
e -> forall name. Ord name => Expr name -> Set name
namesE Expr name
e
namesUF :: Ord name => UpdField name -> Set name
namesUF :: forall name. Ord name => UpdField name -> Set name
namesUF (UpdField UpdHow
_ [Located Selector]
_ Expr name
e) = forall name. Ord name => Expr name -> Set name
namesE Expr name
e
namesPs :: [Pattern name] -> [Located name]
namesPs :: forall name. [Pattern name] -> [Located name]
namesPs = forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap forall name. Pattern name -> [Located name]
namesP
namesP :: Pattern name -> [Located name]
namesP :: forall name. Pattern name -> [Located name]
namesP Pattern name
pat =
case Pattern name
pat of
PVar Located name
x -> [Located name
x]
Pattern name
PWild -> []
PTuple [Pattern name]
ps -> forall name. [Pattern name] -> [Located name]
namesPs [Pattern name]
ps
PRecord Rec (Pattern name)
fs -> forall name. [Pattern name] -> [Located name]
namesPs (forall a b. (a -> b) -> [a] -> [b]
map forall a b. (a, b) -> b
snd (forall a b. RecordMap a b -> [b]
recordElements Rec (Pattern name)
fs))
PList [Pattern name]
ps -> forall name. [Pattern name] -> [Located name]
namesPs [Pattern name]
ps
PTyped Pattern name
p Type name
_ -> forall name. Pattern name -> [Located name]
namesP Pattern name
p
PSplit Pattern name
p1 Pattern name
p2 -> forall name. [Pattern name] -> [Located name]
namesPs [Pattern name
p1,Pattern name
p2]
PLocated Pattern name
p Range
_ -> forall name. Pattern name -> [Located name]
namesP Pattern name
p
namesM :: Ord name => Match name -> ([Located name], Set name)
namesM :: forall name. Ord name => Match name -> ([Located name], Set name)
namesM (Match Pattern name
p Expr name
e) = (forall name. Pattern name -> [Located name]
namesP Pattern name
p, forall name. Ord name => Expr name -> Set name
namesE Expr name
e)
namesM (MatchLet Bind name
b) = forall name. Ord name => Bind name -> ([Located name], Set name)
namesB Bind name
b
namesArm :: Ord name => [Match name] -> ([Located name], Set name)
namesArm :: forall name. Ord name => [Match name] -> ([Located name], Set name)
namesArm = forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr forall {a}.
Ord a =>
([Located a], Set a)
-> ([Located a], Set a) -> ([Located a], Set a)
combine ([],forall a. Set a
Set.empty) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Match name -> ([Located name], Set name)
namesM
where combine :: ([Located a], Set a)
-> ([Located a], Set a) -> ([Located a], Set a)
combine ([Located a]
ds1,Set a
fs1) ([Located a]
ds2,Set a
fs2) =
( forall a. (a -> Bool) -> [a] -> [a]
filter ((forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` forall a b. (a -> b) -> [a] -> [b]
map forall a. Located a -> a
thing [Located a]
ds2) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Located a -> a
thing) [Located a]
ds1 forall a. [a] -> [a] -> [a]
++ [Located a]
ds2
, forall a. Ord a => Set a -> Set a -> Set a
Set.union Set a
fs1 (forall name. Ord name => [Located name] -> Set name -> Set name
boundLNames [Located a]
ds1 Set a
fs2)
)
boundLNames :: Ord name => [Located name] -> Set name -> Set name
boundLNames :: forall name. Ord name => [Located name] -> Set name -> Set name
boundLNames = forall name. Ord name => [name] -> Set name -> Set name
boundNames forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map forall a. Located a -> a
thing
boundNames :: Ord name => [name] -> Set name -> Set name
boundNames :: forall name. Ord name => [name] -> Set name -> Set name
boundNames = forall a. Ord a => Set a -> Set a -> Set a
boundNamesSet forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Ord a => [a] -> Set a
Set.fromList
boundNamesSet :: Ord name => Set name -> Set name -> Set name
boundNamesSet :: forall a. Ord a => Set a -> Set a -> Set a
boundNamesSet Set name
bs Set name
xs = forall a. Ord a => Set a -> Set a -> Set a
Set.difference Set name
xs Set name
bs
tnamesDs :: Ord name => [Decl name] -> ([Located name], Set name)
tnamesDs :: forall name. Ord name => [Decl name] -> ([Located name], Set name)
tnamesDs [Decl name]
ds = ([Located name]
defs, forall name. Ord name => [Located name] -> Set name -> Set name
boundLNames [Located name]
defs (forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Set name]
frees))
where
defs :: [Located name]
defs = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Located name]]
defss
([[Located name]]
defss,[Set name]
frees) = forall a b. [(a, b)] -> ([a], [b])
unzip (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Decl name -> ([Located name], Set name)
tnamesD [Decl name]
ds)
tnamesD :: Ord name => Decl name -> ([Located name], Set name)
tnamesD :: forall name. Ord name => Decl name -> ([Located name], Set name)
tnamesD Decl name
decl =
case Decl name
decl of
DSignature [Located name]
_ Schema name
s -> ([], forall name. Ord name => Schema name -> Set name
tnamesS Schema name
s)
DFixity {} -> ([], forall a. Set a
Set.empty)
DPragma {} -> ([], forall a. Set a
Set.empty)
DBind Bind name
b -> ([], forall name. Ord name => Bind name -> Set name
tnamesB Bind name
b)
DRec [Bind name]
bs -> ([], forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Bind name -> Set name
tnamesB [Bind name]
bs))
DPatBind Pattern name
_ Expr name
e -> ([], forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e)
DLocated Decl name
d Range
_ -> forall name. Ord name => Decl name -> ([Located name], Set name)
tnamesD Decl name
d
DType (TySyn Located name
n Maybe Fixity
_ [TParam name]
ps Type name
t)
-> ([Located name
n], forall a. Ord a => Set a -> Set a -> Set a
Set.difference (forall name. Ord name => Type name -> Set name
tnamesT Type name
t)
(forall a. Ord a => [a] -> Set a
Set.fromList (forall a b. (a -> b) -> [a] -> [b]
map forall n. TParam n -> n
tpName [TParam name]
ps)))
DProp (PropSyn Located name
n Maybe Fixity
_ [TParam name]
ps [Prop name]
cs)
-> ([Located name
n], forall a. Ord a => Set a -> Set a -> Set a
Set.difference (forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Prop name -> Set name
tnamesC [Prop name]
cs))
(forall a. Ord a => [a] -> Set a
Set.fromList (forall a b. (a -> b) -> [a] -> [b]
map forall n. TParam n -> n
tpName [TParam name]
ps)))
tnamesB :: Ord name => Bind name -> Set name
tnamesB :: forall name. Ord name => Bind name -> Set name
tnamesB Bind name
b = forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [Set name
setS, Set name
setP, Set name
setE]
where
setS :: Set name
setS = forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Set a
Set.empty forall name. Ord name => Schema name -> Set name
tnamesS (forall name. Bind name -> Maybe (Schema name)
bSignature Bind name
b)
setP :: Set name
setP = forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Pattern name -> Set name
tnamesP (forall name. Bind name -> [Pattern name]
bParams Bind name
b))
setE :: Set name
setE = forall name. Ord name => BindDef name -> Set name
tnamesDef (forall a. Located a -> a
thing (forall name. Bind name -> Located (BindDef name)
bDef Bind name
b))
tnamesDef :: Ord name => BindDef name -> Set name
tnamesDef :: forall name. Ord name => BindDef name -> Set name
tnamesDef BindDef name
DPrim = forall a. Set a
Set.empty
tnamesDef BindDef name
DForeign = forall a. Set a
Set.empty
tnamesDef (DExpr Expr name
e) = forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e
tnamesDef (DPropGuards [PropGuardCase name]
guards) = forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => PropGuardCase name -> Set name
tnamesPropGuardCase [PropGuardCase name]
guards)
tnamesPropGuardCase :: Ord name => PropGuardCase name -> Set name
tnamesPropGuardCase :: forall name. Ord name => PropGuardCase name -> Set name
tnamesPropGuardCase PropGuardCase name
c =
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall name. Ord name => Expr name -> Set name
tnamesE (forall name. PropGuardCase name -> Expr name
pgcExpr PropGuardCase name
c) forall a. a -> [a] -> [a]
: forall a b. (a -> b) -> [a] -> [b]
map (forall name. Ord name => Prop name -> Set name
tnamesC forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Located a -> a
thing) (forall name. PropGuardCase name -> [Located (Prop name)]
pgcProps PropGuardCase name
c))
tnamesE :: Ord name => Expr name -> Set name
tnamesE :: forall name. Ord name => Expr name -> Set name
tnamesE Expr name
expr =
case Expr name
expr of
EVar name
_ -> forall a. Set a
Set.empty
ELit Literal
_ -> forall a. Set a
Set.empty
EGenerate Expr name
e -> forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e
ETuple [Expr name]
es -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Expr name -> Set name
tnamesE [Expr name]
es)
ERecord Rec (Expr name)
fs -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map (forall name. Ord name => Expr name -> Set name
tnamesE forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> b
snd) (forall a b. RecordMap a b -> [b]
recordElements Rec (Expr name)
fs))
ESel Expr name
e Selector
_ -> forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e
EUpd Maybe (Expr name)
mb [UpdField name]
fs -> let e :: Set name
e = forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Set a
Set.empty forall name. Ord name => Expr name -> Set name
tnamesE Maybe (Expr name)
mb
in forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (Set name
e forall a. a -> [a] -> [a]
: forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => UpdField name -> Set name
tnamesUF [UpdField name]
fs)
EList [Expr name]
es -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Expr name -> Set name
tnamesE [Expr name]
es)
EFromTo Type name
a Maybe (Type name)
b Type name
c Maybe (Type name)
t -> forall name. Ord name => Type name -> Set name
tnamesT Type name
a
forall a. Ord a => Set a -> Set a -> Set a
`Set.union` forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Set a
Set.empty forall name. Ord name => Type name -> Set name
tnamesT Maybe (Type name)
b
forall a. Ord a => Set a -> Set a -> Set a
`Set.union` forall name. Ord name => Type name -> Set name
tnamesT Type name
c
forall a. Ord a => Set a -> Set a -> Set a
`Set.union` forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Set a
Set.empty forall name. Ord name => Type name -> Set name
tnamesT Maybe (Type name)
t
EFromToBy Bool
_ Type name
a Type name
b Type name
c Maybe (Type name)
t -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [ forall name. Ord name => Type name -> Set name
tnamesT Type name
a, forall name. Ord name => Type name -> Set name
tnamesT Type name
b, forall name. Ord name => Type name -> Set name
tnamesT Type name
c, forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Set a
Set.empty forall name. Ord name => Type name -> Set name
tnamesT Maybe (Type name)
t ]
EFromToDownBy Bool
_ Type name
a Type name
b Type name
c Maybe (Type name)
t -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions [ forall name. Ord name => Type name -> Set name
tnamesT Type name
a, forall name. Ord name => Type name -> Set name
tnamesT Type name
b, forall name. Ord name => Type name -> Set name
tnamesT Type name
c, forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Set a
Set.empty forall name. Ord name => Type name -> Set name
tnamesT Maybe (Type name)
t ]
EFromToLessThan Type name
a Type name
b Maybe (Type name)
t -> forall name. Ord name => Type name -> Set name
tnamesT Type name
a forall a. Ord a => Set a -> Set a -> Set a
`Set.union` forall name. Ord name => Type name -> Set name
tnamesT Type name
b
forall a. Ord a => Set a -> Set a -> Set a
`Set.union` forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Set a
Set.empty forall name. Ord name => Type name -> Set name
tnamesT Maybe (Type name)
t
EInfFrom Expr name
e Maybe (Expr name)
e' -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e) (forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Set a
Set.empty forall name. Ord name => Expr name -> Set name
tnamesE Maybe (Expr name)
e')
EComp Expr name
e [[Match name]]
mss -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e) (forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Match name -> Set name
tnamesM (forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Match name]]
mss)))
EApp Expr name
e1 Expr name
e2 -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e1) (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e2)
EAppT Expr name
e [TypeInst name]
fs -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e) (forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => TypeInst name -> Set name
tnamesTI [TypeInst name]
fs))
EIf Expr name
e1 Expr name
e2 Expr name
e3 -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e1) (forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e2) (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e3))
EWhere Expr name
e [Decl name]
ds -> let ([Located name]
bs,Set name
xs) = forall name. Ord name => [Decl name] -> ([Located name], Set name)
tnamesDs [Decl name]
ds
in forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => [Located name] -> Set name -> Set name
boundLNames [Located name]
bs (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e)) Set name
xs
ETyped Expr name
e Type name
t -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e) (forall name. Ord name => Type name -> Set name
tnamesT Type name
t)
ETypeVal Type name
t -> forall name. Ord name => Type name -> Set name
tnamesT Type name
t
EFun FunDesc name
_ [Pattern name]
ps Expr name
e -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Pattern name -> Set name
tnamesP [Pattern name]
ps)) (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e)
ELocated Expr name
e Range
_ -> forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e
ESplit Expr name
e -> forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e
EParens Expr name
e -> forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e
EInfix Expr name
a Located name
_ Fixity
_ Expr name
b -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
a) (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
b)
EPrefix PrefixOp
_ Expr name
e -> forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e
tnamesUF :: Ord name => UpdField name -> Set name
tnamesUF :: forall name. Ord name => UpdField name -> Set name
tnamesUF (UpdField UpdHow
_ [Located Selector]
_ Expr name
e) = forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e
tnamesTI :: Ord name => TypeInst name -> Set name
tnamesTI :: forall name. Ord name => TypeInst name -> Set name
tnamesTI (NamedInst Named (Type name)
f) = forall name. Ord name => Type name -> Set name
tnamesT (forall a. Named a -> a
value Named (Type name)
f)
tnamesTI (PosInst Type name
t) = forall name. Ord name => Type name -> Set name
tnamesT Type name
t
tnamesP :: Ord name => Pattern name -> Set name
tnamesP :: forall name. Ord name => Pattern name -> Set name
tnamesP Pattern name
pat =
case Pattern name
pat of
PVar Located name
_ -> forall a. Set a
Set.empty
Pattern name
PWild -> forall a. Set a
Set.empty
PTuple [Pattern name]
ps -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Pattern name -> Set name
tnamesP [Pattern name]
ps)
PRecord Rec (Pattern name)
fs -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map (forall name. Ord name => Pattern name -> Set name
tnamesP forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> b
snd) (forall a b. RecordMap a b -> [b]
recordElements Rec (Pattern name)
fs))
PList [Pattern name]
ps -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Pattern name -> Set name
tnamesP [Pattern name]
ps)
PTyped Pattern name
p Type name
t -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Pattern name -> Set name
tnamesP Pattern name
p) (forall name. Ord name => Type name -> Set name
tnamesT Type name
t)
PSplit Pattern name
p1 Pattern name
p2 -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Pattern name -> Set name
tnamesP Pattern name
p1) (forall name. Ord name => Pattern name -> Set name
tnamesP Pattern name
p2)
PLocated Pattern name
p Range
_ -> forall name. Ord name => Pattern name -> Set name
tnamesP Pattern name
p
tnamesM :: Ord name => Match name -> Set name
tnamesM :: forall name. Ord name => Match name -> Set name
tnamesM (Match Pattern name
p Expr name
e) = forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Pattern name -> Set name
tnamesP Pattern name
p) (forall name. Ord name => Expr name -> Set name
tnamesE Expr name
e)
tnamesM (MatchLet Bind name
b) = forall name. Ord name => Bind name -> Set name
tnamesB Bind name
b
tnamesS :: Ord name => Schema name -> Set name
tnamesS :: forall name. Ord name => Schema name -> Set name
tnamesS (Forall [TParam name]
params [Prop name]
props Type name
ty Maybe Range
_) =
forall a. Ord a => Set a -> Set a -> Set a
Set.difference (forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Prop name -> Set name
tnamesC [Prop name]
props)) (forall name. Ord name => Type name -> Set name
tnamesT Type name
ty))
(forall a. Ord a => [a] -> Set a
Set.fromList (forall a b. (a -> b) -> [a] -> [b]
map forall n. TParam n -> n
tpName [TParam name]
params))
tnamesC :: Ord name => Prop name -> Set name
tnamesC :: forall name. Ord name => Prop name -> Set name
tnamesC Prop name
prop =
case Prop name
prop of
CType Type name
t -> forall name. Ord name => Type name -> Set name
tnamesT Type name
t
tnamesT :: Ord name => Type name -> Set name
tnamesT :: forall name. Ord name => Type name -> Set name
tnamesT Type name
ty =
case Type name
ty of
Type name
TWild -> forall a. Set a
Set.empty
TFun Type name
t1 Type name
t2 -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Type name -> Set name
tnamesT Type name
t1) (forall name. Ord name => Type name -> Set name
tnamesT Type name
t2)
TSeq Type name
t1 Type name
t2 -> forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Type name -> Set name
tnamesT Type name
t1) (forall name. Ord name => Type name -> Set name
tnamesT Type name
t2)
Type name
TBit -> forall a. Set a
Set.empty
TNum Integer
_ -> forall a. Set a
Set.empty
TChar Char
__ -> forall a. Set a
Set.empty
TTuple [Type name]
ts -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Type name -> Set name
tnamesT [Type name]
ts)
TRecord Rec (Type name)
fs -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map (forall name. Ord name => Type name -> Set name
tnamesT forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> b
snd) (forall a b. RecordMap a b -> [b]
recordElements Rec (Type name)
fs))
TTyApp [Named (Type name)]
fs -> forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map (forall name. Ord name => Type name -> Set name
tnamesT forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Named a -> a
value) [Named (Type name)]
fs)
TLocated Type name
t Range
_ -> forall name. Ord name => Type name -> Set name
tnamesT Type name
t
TUser name
x [Type name]
ts -> forall a. Ord a => a -> Set a -> Set a
Set.insert name
x (forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions (forall a b. (a -> b) -> [a] -> [b]
map forall name. Ord name => Type name -> Set name
tnamesT [Type name]
ts))
TParens Type name
t Maybe Kind
_ -> forall name. Ord name => Type name -> Set name
tnamesT Type name
t
TInfix Type name
a Located name
x Fixity
_ Type name
c-> forall a. Ord a => a -> Set a -> Set a
Set.insert (forall a. Located a -> a
thing Located name
x)
(forall a. Ord a => Set a -> Set a -> Set a
Set.union (forall name. Ord name => Type name -> Set name
tnamesT Type name
a) (forall name. Ord name => Type name -> Set name
tnamesT Type name
c))