disco-0.1.5: Functional programming language for teaching discrete math.
Copyrightdisco team and contributors
Maintainerbyorgey@gmail.com
Safe HaskellNone
LanguageHaskell2010

Disco.Names

Description

Names for modules and identifiers.

Synopsis

Modules and their provenance

data ModuleProvenance Source #

Where did a module come from?

Constructors

Dir FilePath

From a particular directory (relative to cwd)

Stdlib

From the standard library

Instances

Instances details
Eq ModuleProvenance Source # 
Instance details

Defined in Disco.Names

Data ModuleProvenance Source # 
Instance details

Defined in Disco.Names

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ModuleProvenance -> c ModuleProvenance #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ModuleProvenance #

toConstr :: ModuleProvenance -> Constr #

dataTypeOf :: ModuleProvenance -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ModuleProvenance) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ModuleProvenance) #

gmapT :: (forall b. Data b => b -> b) -> ModuleProvenance -> ModuleProvenance #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ModuleProvenance -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ModuleProvenance -> r #

gmapQ :: (forall d. Data d => d -> u) -> ModuleProvenance -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ModuleProvenance -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ModuleProvenance -> m ModuleProvenance #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ModuleProvenance -> m ModuleProvenance #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ModuleProvenance -> m ModuleProvenance #

Ord ModuleProvenance Source # 
Instance details

Defined in Disco.Names

Show ModuleProvenance Source # 
Instance details

Defined in Disco.Names

Generic ModuleProvenance Source # 
Instance details

Defined in Disco.Names

Associated Types

type Rep ModuleProvenance :: Type -> Type #

Alpha ModuleProvenance Source # 
Instance details

Defined in Disco.Names

Subst Type ModuleProvenance Source # 
Instance details

Defined in Disco.Names

type Rep ModuleProvenance Source # 
Instance details

Defined in Disco.Names

type Rep ModuleProvenance = D1 ('MetaData "ModuleProvenance" "Disco.Names" "disco-0.1.5-Dj6M4uP9IofLLslCWcCyVQ" 'False) (C1 ('MetaCons "Dir" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePath)) :+: C1 ('MetaCons "Stdlib" 'PrefixI 'False) (U1 :: Type -> Type))

data ModuleName Source #

The name of a module.

Constructors

REPLModule

The special top-level "module" consisting of what has been entered at the REPL.

Named ModuleProvenance String

A named module, with its name and provenance.

Instances

Instances details
Eq ModuleName Source # 
Instance details

Defined in Disco.Names

Data ModuleName Source # 
Instance details

Defined in Disco.Names

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ModuleName -> c ModuleName #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ModuleName #

toConstr :: ModuleName -> Constr #

dataTypeOf :: ModuleName -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ModuleName) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ModuleName) #

gmapT :: (forall b. Data b => b -> b) -> ModuleName -> ModuleName #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ModuleName -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ModuleName -> r #

gmapQ :: (forall d. Data d => d -> u) -> ModuleName -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ModuleName -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ModuleName -> m ModuleName #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ModuleName -> m ModuleName #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ModuleName -> m ModuleName #

Ord ModuleName Source # 
Instance details

Defined in Disco.Names

Show ModuleName Source # 
Instance details

Defined in Disco.Names

Generic ModuleName Source # 
Instance details

Defined in Disco.Names

Associated Types

type Rep ModuleName :: Type -> Type #

Alpha ModuleName Source # 
Instance details

Defined in Disco.Names

Pretty ModuleName Source # 
Instance details

Defined in Disco.Names

Methods

pretty :: forall (r :: EffectRow). Members '[Reader PA, LFresh] r => ModuleName -> Sem r Doc Source #

Subst Type ModuleName Source # 
Instance details

Defined in Disco.Names

type Rep ModuleName Source # 
Instance details

Defined in Disco.Names

type Rep ModuleName = D1 ('MetaData "ModuleName" "Disco.Names" "disco-0.1.5-Dj6M4uP9IofLLslCWcCyVQ" 'False) (C1 ('MetaCons "REPLModule" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Named" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ModuleProvenance) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))

Names and their provenance

data NameProvenance Source #

Where did a name come from?

Constructors

LocalName

The name is locally bound

QualifiedName ModuleName

The name is exported by the given module

Instances

Instances details
Eq NameProvenance Source # 
Instance details

Defined in Disco.Names

Data NameProvenance Source # 
Instance details

Defined in Disco.Names

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> NameProvenance -> c NameProvenance #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c NameProvenance #

toConstr :: NameProvenance -> Constr #

dataTypeOf :: NameProvenance -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c NameProvenance) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c NameProvenance) #

gmapT :: (forall b. Data b => b -> b) -> NameProvenance -> NameProvenance #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> NameProvenance -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> NameProvenance -> r #

gmapQ :: (forall d. Data d => d -> u) -> NameProvenance -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> NameProvenance -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> NameProvenance -> m NameProvenance #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> NameProvenance -> m NameProvenance #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> NameProvenance -> m NameProvenance #

Ord NameProvenance Source # 
Instance details

Defined in Disco.Names

Show NameProvenance Source # 
Instance details

Defined in Disco.Names

Generic NameProvenance Source # 
Instance details

Defined in Disco.Names

Associated Types

type Rep NameProvenance :: Type -> Type #

Alpha NameProvenance Source # 
Instance details

Defined in Disco.Names

Subst Type NameProvenance Source # 
Instance details

Defined in Disco.Names

type Rep NameProvenance Source # 
Instance details

Defined in Disco.Names

type Rep NameProvenance = D1 ('MetaData "NameProvenance" "Disco.Names" "disco-0.1.5-Dj6M4uP9IofLLslCWcCyVQ" 'False) (C1 ('MetaCons "LocalName" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "QualifiedName" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ModuleName)))

data QName a Source #

A QName, or qualified name, is a Name paired with its NameProvenance.

Constructors

QName 

Instances

Instances details
Subst Type (QName a) Source # 
Instance details

Defined in Disco.Names

Methods

isvar :: QName a -> Maybe (SubstName (QName a) Type) #

isCoerceVar :: QName a -> Maybe (SubstCoerce (QName a) Type) #

subst :: Name Type -> Type -> QName a -> QName a #

substs :: [(Name Type, Type)] -> QName a -> QName a #

Eq (QName a) Source # 
Instance details

Defined in Disco.Names

Methods

(==) :: QName a -> QName a -> Bool #

(/=) :: QName a -> QName a -> Bool #

Data a => Data (QName a) Source # 
Instance details

Defined in Disco.Names

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> QName a -> c (QName a) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (QName a) #

toConstr :: QName a -> Constr #

dataTypeOf :: QName a -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (QName a)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (QName a)) #

gmapT :: (forall b. Data b => b -> b) -> QName a -> QName a #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> QName a -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> QName a -> r #

gmapQ :: (forall d. Data d => d -> u) -> QName a -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> QName a -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> QName a -> m (QName a) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> QName a -> m (QName a) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> QName a -> m (QName a) #

Ord (QName a) Source # 
Instance details

Defined in Disco.Names

Methods

compare :: QName a -> QName a -> Ordering #

(<) :: QName a -> QName a -> Bool #

(<=) :: QName a -> QName a -> Bool #

(>) :: QName a -> QName a -> Bool #

(>=) :: QName a -> QName a -> Bool #

max :: QName a -> QName a -> QName a #

min :: QName a -> QName a -> QName a #

Show (QName a) Source # 
Instance details

Defined in Disco.Names

Methods

showsPrec :: Int -> QName a -> ShowS #

show :: QName a -> String #

showList :: [QName a] -> ShowS #

Generic (QName a) Source # 
Instance details

Defined in Disco.Names

Associated Types

type Rep (QName a) :: Type -> Type #

Methods

from :: QName a -> Rep (QName a) x #

to :: Rep (QName a) x -> QName a #

Typeable a => Alpha (QName a) Source # 
Instance details

Defined in Disco.Names

Pretty (QName a) Source # 
Instance details

Defined in Disco.Names

Methods

pretty :: forall (r :: EffectRow). Members '[Reader PA, LFresh] r => QName a -> Sem r Doc Source #

type Rep (QName a) Source # 
Instance details

Defined in Disco.Names

type Rep (QName a) = D1 ('MetaData "QName" "Disco.Names" "disco-0.1.5-Dj6M4uP9IofLLslCWcCyVQ" 'False) (C1 ('MetaCons "QName" 'PrefixI 'True) (S1 ('MetaSel ('Just "qnameProvenance") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 NameProvenance) :*: S1 ('MetaSel ('Just "qname") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Name a))))

isFree :: QName a -> Bool Source #

Does this name correspond to a free variable?

localName :: Name a -> QName a Source #

Create a locally bound qualified name.

(.-) :: ModuleName -> Name a -> QName a Source #

Create a module-bound qualified name.

Name-related utilities

fvQ :: (Data t, Typeable e) => Traversal' t (QName e) Source #

The unbound-generics library gives us free variables for free. But when dealing with typed and desugared ASTs, we want all the free QNames instead of just Names.

substQ :: Subst b a => QName b -> b -> a -> a Source #

substsQ :: Subst b a => [(QName b, b)] -> a -> a Source #