Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Nominal (named) types declaration, instantiation, construction, and access.
Synopsis
- data NominalDecl typ h = NominalDecl {
- _nParams :: NomVarTypes typ # QVars
- _nScheme :: Scheme (NomVarTypes typ) typ h
- nParams :: forall typ h. Lens' (NominalDecl typ h) ((#) (NomVarTypes typ) QVars)
- nScheme :: forall typ h h. Lens (NominalDecl typ h) (NominalDecl typ h) (Scheme (NomVarTypes typ) typ h) (Scheme (NomVarTypes typ) typ h)
- data W_NominalDecl (typ :: HyperType) node where
- W_NominalDecl_typ :: W_NominalDecl typ typ
- data NominalInst nomId varTypes h = NominalInst {
- _nId :: nomId
- _nArgs :: varTypes # QVarInstances (GetHyperType h)
- nId :: forall nomId varTypes h nomId. Lens (NominalInst nomId varTypes h) (NominalInst nomId varTypes h) nomId nomId
- nArgs :: forall nomId varTypes h varTypes h. Lens (NominalInst nomId varTypes h) (NominalInst nomId varTypes h) ((#) varTypes (QVarInstances (GetHyperType h))) ((#) varTypes (QVarInstances (GetHyperType h)))
- data ToNom nomId term h = ToNom {}
- tnId :: forall nomId term h nomId. Lens (ToNom nomId term h) (ToNom nomId term h) nomId nomId
- tnVal :: forall nomId term h term h. Lens (ToNom nomId term h) (ToNom nomId term h) ((:#) h term) ((:#) h term)
- data W_ToNom (nomId :: Type) (term :: HyperType) node where
- W_ToNom_term :: W_ToNom nomId term term
- newtype FromNom nomId (term :: HyperType) (h :: AHyperType) = FromNom nomId
- _FromNom :: forall nomId term h nomId term h. Iso (FromNom nomId term h) (FromNom nomId term h) nomId nomId
- class HasNominalInst nomId typ where
- nominalInst :: Prism' (typ # h) (NominalInst nomId (NomVarTypes typ) # h)
- type family NomVarTypes (t :: HyperType) :: HyperType
- class MonadNominals nomId typ m where
- getNominalDecl :: nomId -> m (LoadedNominalDecl typ # UVarOf m)
- data LoadedNominalDecl typ v
- loadNominalDecl :: forall m typ. (HTraversable (NomVarTypes typ), HNodesConstraint (NomVarTypes typ) (Unify m), HasScheme (NomVarTypes typ) m typ) => (Pure # NominalDecl typ) -> m (LoadedNominalDecl typ # UVarOf m)
Documentation
data NominalDecl typ h Source #
A declaration of a nominal type.
NominalDecl | |
|
Instances
nParams :: forall typ h. Lens' (NominalDecl typ h) ((#) (NomVarTypes typ) QVars) Source #
nScheme :: forall typ h h. Lens (NominalDecl typ h) (NominalDecl typ h) (Scheme (NomVarTypes typ) typ h) (Scheme (NomVarTypes typ) typ h) Source #
data W_NominalDecl (typ :: HyperType) node where Source #
W_NominalDecl_typ :: W_NominalDecl typ typ |
data NominalInst nomId varTypes h Source #
An instantiation of a nominal type
NominalInst | |
|
Instances
(HFunctor varTypes, HContext varTypes, HNodesConstraint varTypes OrdQVar) => HContext (NominalInst nomId varTypes) Source # | |
Defined in Hyper.Syntax.Nominal hcontext :: forall (p :: HyperType). (NominalInst nomId varTypes # p) -> NominalInst nomId varTypes # (HFunc p (Const (NominalInst nomId varTypes # p)) :*: p) Source # | |
HFoldable v => HFoldable (NominalInst n v) Source # | |
Defined in Hyper.Syntax.Nominal hfoldMap :: Monoid a => (forall (n0 :: HyperType). HWitness (NominalInst n v) n0 -> (p # n0) -> a) -> (NominalInst n v # p) -> a Source # | |
HFunctor v => HFunctor (NominalInst n v) Source # | |
Defined in Hyper.Syntax.Nominal hmap :: (forall (n0 :: HyperType). HWitness (NominalInst n v) n0 -> (p # n0) -> q # n0) -> (NominalInst n v # p) -> NominalInst n v # q Source # | |
HNodes v => HNodes (NominalInst n v) Source # | |
Defined in Hyper.Syntax.Nominal type HNodesConstraint (NominalInst n v) c Source # type HWitnessType (NominalInst n v) :: HyperType -> Type Source # hLiftConstraint :: forall c (n0 :: HyperType) r. HNodesConstraint (NominalInst n v) c => HWitness (NominalInst n v) n0 -> Proxy c -> (c n0 => r) -> r Source # | |
HTraversable v => HTraversable (NominalInst n v) Source # | |
Defined in Hyper.Syntax.Nominal hsequence :: forall f (p :: AHyperType -> Type). Applicative f => (NominalInst n v # ContainedH f p) -> f (NominalInst n v # p) Source # | |
(Eq nomId, ZipMatch varTypes, HTraversable varTypes, HNodesConstraint varTypes ZipMatch, HNodesConstraint varTypes OrdQVar) => ZipMatch (NominalInst nomId varTypes) Source # | |
Defined in Hyper.Syntax.Nominal zipMatch :: forall (p :: HyperType) (q :: HyperType). (NominalInst nomId varTypes # p) -> (NominalInst nomId varTypes # q) -> Maybe (NominalInst nomId varTypes # (p :*: q)) Source # | |
Generic (NominalInst nomId varTypes h) Source # | |
Defined in Hyper.Syntax.Nominal type Rep (NominalInst nomId varTypes h) :: Type -> Type # from :: NominalInst nomId varTypes h -> Rep (NominalInst nomId varTypes h) x # to :: Rep (NominalInst nomId varTypes h) x -> NominalInst nomId varTypes h # | |
Constraints (NominalInst nomId varTypes h) Show => Show (NominalInst nomId varTypes h) Source # | |
Defined in Hyper.Syntax.Nominal showsPrec :: Int -> NominalInst nomId varTypes h -> ShowS # show :: NominalInst nomId varTypes h -> String # showList :: [NominalInst nomId varTypes h] -> ShowS # | |
Constraints (NominalInst nomId varTypes h) Binary => Binary (NominalInst nomId varTypes h) Source # | |
Defined in Hyper.Syntax.Nominal put :: NominalInst nomId varTypes h -> Put # get :: Get (NominalInst nomId varTypes h) # putList :: [NominalInst nomId varTypes h] -> Put # | |
Constraints (NominalInst nomId varTypes h) NFData => NFData (NominalInst nomId varTypes h) Source # | |
Defined in Hyper.Syntax.Nominal rnf :: NominalInst nomId varTypes h -> () # | |
Constraints (NominalInst nomId varTypes h) Eq => Eq (NominalInst nomId varTypes h) Source # | |
Defined in Hyper.Syntax.Nominal (==) :: NominalInst nomId varTypes h -> NominalInst nomId varTypes h -> Bool # (/=) :: NominalInst nomId varTypes h -> NominalInst nomId varTypes h -> Bool # | |
Constraints (NominalInst nomId varTypes h) Ord => Ord (NominalInst nomId varTypes h) Source # | |
Defined in Hyper.Syntax.Nominal compare :: NominalInst nomId varTypes h -> NominalInst nomId varTypes h -> Ordering # (<) :: NominalInst nomId varTypes h -> NominalInst nomId varTypes h -> Bool # (<=) :: NominalInst nomId varTypes h -> NominalInst nomId varTypes h -> Bool # (>) :: NominalInst nomId varTypes h -> NominalInst nomId varTypes h -> Bool # (>=) :: NominalInst nomId varTypes h -> NominalInst nomId varTypes h -> Bool # max :: NominalInst nomId varTypes h -> NominalInst nomId varTypes h -> NominalInst nomId varTypes h # min :: NominalInst nomId varTypes h -> NominalInst nomId varTypes h -> NominalInst nomId varTypes h # | |
(Pretty nomId, HApply varTypes, HFoldable varTypes, HNodesConstraint varTypes (PrettyConstraints h)) => Pretty (NominalInst nomId varTypes h) Source # | |
Defined in Hyper.Syntax.Nominal pPrintPrec :: PrettyLevel -> Rational -> NominalInst nomId varTypes h -> Doc # pPrint :: NominalInst nomId varTypes h -> Doc # pPrintList :: PrettyLevel -> [NominalInst nomId varTypes h] -> Doc # | |
type HWitnessType (NominalInst n v) Source # | |
Defined in Hyper.Syntax.Nominal | |
type HNodesConstraint (NominalInst n v) c Source # | |
Defined in Hyper.Syntax.Nominal | |
type Rep (NominalInst nomId varTypes h) Source # | |
Defined in Hyper.Syntax.Nominal type Rep (NominalInst nomId varTypes h) = D1 ('MetaData "NominalInst" "Hyper.Syntax.Nominal" "hypertypes-0.2.2-9g9pX7Hb2mGI4yyssTDpOd" 'False) (C1 ('MetaCons "NominalInst" 'PrefixI 'True) (S1 ('MetaSel ('Just "_nId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 nomId) :*: S1 ('MetaSel ('Just "_nArgs") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (varTypes # QVarInstances (GetHyperType h))))) |
nId :: forall nomId varTypes h nomId. Lens (NominalInst nomId varTypes h) (NominalInst nomId varTypes h) nomId nomId Source #
nArgs :: forall nomId varTypes h varTypes h. Lens (NominalInst nomId varTypes h) (NominalInst nomId varTypes h) ((#) varTypes (QVarInstances (GetHyperType h))) ((#) varTypes (QVarInstances (GetHyperType h))) Source #
data ToNom nomId term h Source #
Nominal data constructor.
Wrap content with a data constructor (analogues to a data constructor of a Haskell `newtype`'s).
Introduces the nominal's foralled type variables into the value's scope.
Instances
(MonadScopeLevel m, MonadNominals nomId (TypeOf expr) m, HTraversable (NomVarTypes (TypeOf expr)), HNodesConstraint (NomVarTypes (TypeOf expr)) (UnifyGen m), UnifyGen m (TypeOf expr), HasInferredType expr, Infer m expr) => Infer m (ToNom nomId expr) Source # | |
Defined in Hyper.Syntax.Nominal inferBody :: forall (h :: AHyperType -> Type). (ToNom nomId expr # InferChild m h) -> m (ToNom nomId expr # h, InferOf (ToNom nomId expr) # UVarOf m) Source # inferContext :: proxy0 m -> proxy1 (ToNom nomId expr) -> Dict (HNodesConstraint (ToNom nomId expr) (Infer m), HNodesConstraint (InferOf (ToNom nomId expr)) (UnifyGen m)) Source # | |
Semigroup nomId => HApply (ToNom nomId term) Source # | |
HContext (ToNom nomId term) Source # | |
HFoldable (ToNom nomId term) Source # | |
HFunctor (ToNom nomId term) Source # | |
HNodes (ToNom nomId term) Source # | |
Defined in Hyper.Syntax.Nominal type HNodesConstraint (ToNom nomId term) c Source # type HWitnessType (ToNom nomId term) :: HyperType -> Type Source # hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (ToNom nomId term) c => HWitness (ToNom nomId term) n -> Proxy c -> (c n => r) -> r Source # | |
Monoid nomId => HPointed (ToNom nomId term) Source # | |
HTraversable (ToNom nomId term) Source # | |
Defined in Hyper.Syntax.Nominal hsequence :: forall f (p :: AHyperType -> Type). Applicative f => (ToNom nomId term # ContainedH f p) -> f (ToNom nomId term # p) Source # | |
Eq nomId => ZipMatch (ToNom nomId term) Source # | |
HMorph (ToNom nomId term0) (ToNom nomId term1) Source # | |
Defined in Hyper.Syntax.Nominal type MorphConstraint (ToNom nomId term0) (ToNom nomId term1) c Source # data MorphWitness (ToNom nomId term0) (ToNom nomId term1) :: HyperType -> HyperType -> Type Source # morphMap :: (forall (a :: HyperType) (b :: HyperType). MorphWitness (ToNom nomId term0) (ToNom nomId term1) a b -> (p # a) -> q # b) -> (ToNom nomId term0 # p) -> ToNom nomId term1 # q Source # morphLiftConstraint :: forall c (a :: HyperType) (b :: HyperType) r. MorphConstraint (ToNom nomId term0) (ToNom nomId term1) c => MorphWitness (ToNom nomId term0) (ToNom nomId term1) a b -> Proxy c -> (c a b => r) -> r Source # | |
Generic (ToNom nomId term h) Source # | |
Constraints (ToNom nomId term h) Show => Show (ToNom nomId term h) Source # | |
Constraints (ToNom nomId term h) Binary => Binary (ToNom nomId term h) Source # | |
Constraints (ToNom nomId term h) NFData => NFData (ToNom nomId term h) Source # | |
Defined in Hyper.Syntax.Nominal | |
Constraints (ToNom nomId term h) Eq => Eq (ToNom nomId term h) Source # | |
Constraints (ToNom nomId term h) Ord => Ord (ToNom nomId term h) Source # | |
Defined in Hyper.Syntax.Nominal compare :: ToNom nomId term h -> ToNom nomId term h -> Ordering # (<) :: ToNom nomId term h -> ToNom nomId term h -> Bool # (<=) :: ToNom nomId term h -> ToNom nomId term h -> Bool # (>) :: ToNom nomId term h -> ToNom nomId term h -> Bool # (>=) :: ToNom nomId term h -> ToNom nomId term h -> Bool # max :: ToNom nomId term h -> ToNom nomId term h -> ToNom nomId term h # min :: ToNom nomId term h -> ToNom nomId term h -> ToNom nomId term h # | |
Constraints (ToNom nomId term h) Pretty => Pretty (ToNom nomId term h) Source # | |
Defined in Hyper.Syntax.Nominal pPrintPrec :: PrettyLevel -> Rational -> ToNom nomId term h -> Doc # pPrint :: ToNom nomId term h -> Doc # pPrintList :: PrettyLevel -> [ToNom nomId term h] -> Doc # | |
type InferOf (ToNom n e) Source # | |
Defined in Hyper.Syntax.Nominal | |
type HWitnessType (ToNom nomId term) Source # | |
Defined in Hyper.Syntax.Nominal | |
type HNodesConstraint (ToNom nomId term) constraint Source # | |
Defined in Hyper.Syntax.Nominal | |
data MorphWitness (ToNom nomId term0) (ToNom nomId term1) _ _1 Source # | |
Defined in Hyper.Syntax.Nominal data MorphWitness (ToNom nomId term0) (ToNom nomId term1) _ _1 where
| |
type MorphConstraint (ToNom nomId term0) (ToNom nomId term1) constraint Source # | |
Defined in Hyper.Syntax.Nominal | |
type Rep (ToNom nomId term h) Source # | |
Defined in Hyper.Syntax.Nominal type Rep (ToNom nomId term h) = D1 ('MetaData "ToNom" "Hyper.Syntax.Nominal" "hypertypes-0.2.2-9g9pX7Hb2mGI4yyssTDpOd" 'False) (C1 ('MetaCons "ToNom" 'PrefixI 'True) (S1 ('MetaSel ('Just "_tnId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 nomId) :*: S1 ('MetaSel ('Just "_tnVal") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (h :# term)))) |
tnId :: forall nomId term h nomId. Lens (ToNom nomId term h) (ToNom nomId term h) nomId nomId Source #
tnVal :: forall nomId term h term h. Lens (ToNom nomId term h) (ToNom nomId term h) ((:#) h term) ((:#) h term) Source #
data W_ToNom (nomId :: Type) (term :: HyperType) node where Source #
W_ToNom_term :: W_ToNom nomId term term |
newtype FromNom nomId (term :: HyperType) (h :: AHyperType) Source #
Access the data in a nominally typed value.
Analogues to a getter of a Haskell `newtype`.
FromNom nomId |
Instances
(Infer m expr, HasNominalInst nomId (TypeOf expr), MonadNominals nomId (TypeOf expr) m, HTraversable (NomVarTypes (TypeOf expr)), HNodesConstraint (NomVarTypes (TypeOf expr)) (UnifyGen m), UnifyGen m (TypeOf expr)) => Infer m (FromNom nomId expr) Source # | |
Defined in Hyper.Syntax.Nominal inferBody :: forall (h :: AHyperType -> Type). (FromNom nomId expr # InferChild m h) -> m (FromNom nomId expr # h, InferOf (FromNom nomId expr) # UVarOf m) Source # inferContext :: proxy0 m -> proxy1 (FromNom nomId expr) -> Dict (HNodesConstraint (FromNom nomId expr) (Infer m), HNodesConstraint (InferOf (FromNom nomId expr)) (UnifyGen m)) Source # | |
Semigroup nomId => HApply (FromNom nomId term) Source # | |
HContext (FromNom nomId term) Source # | |
HFoldable (FromNom nomId term) Source # | |
HFunctor (FromNom nomId term) Source # | |
HNodes (FromNom nomId term) Source # | |
Defined in Hyper.Syntax.Nominal type HNodesConstraint (FromNom nomId term) c Source # type HWitnessType (FromNom nomId term) :: HyperType -> Type Source # hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (FromNom nomId term) c => HWitness (FromNom nomId term) n -> Proxy c -> (c n => r) -> r Source # | |
Monoid nomId => HPointed (FromNom nomId term) Source # | |
HTraversable (FromNom nomId term) Source # | |
Defined in Hyper.Syntax.Nominal hsequence :: forall f (p :: AHyperType -> Type). Applicative f => (FromNom nomId term # ContainedH f p) -> f (FromNom nomId term # p) Source # | |
Eq nomId => ZipMatch (FromNom nomId term) Source # | |
Generic (FromNom nomId term h) Source # | |
Show nomId => Show (FromNom nomId term h) Source # | |
Binary nomId => Binary (FromNom nomId term h) Source # | |
NFData nomId => NFData (FromNom nomId term h) Source # | |
Defined in Hyper.Syntax.Nominal | |
Eq nomId => Eq (FromNom nomId term h) Source # | |
Ord nomId => Ord (FromNom nomId term h) Source # | |
Defined in Hyper.Syntax.Nominal compare :: FromNom nomId term h -> FromNom nomId term h -> Ordering # (<) :: FromNom nomId term h -> FromNom nomId term h -> Bool # (<=) :: FromNom nomId term h -> FromNom nomId term h -> Bool # (>) :: FromNom nomId term h -> FromNom nomId term h -> Bool # (>=) :: FromNom nomId term h -> FromNom nomId term h -> Bool # max :: FromNom nomId term h -> FromNom nomId term h -> FromNom nomId term h # min :: FromNom nomId term h -> FromNom nomId term h -> FromNom nomId term h # | |
type InferOf (FromNom _1 e) Source # | |
Defined in Hyper.Syntax.Nominal | |
type HWitnessType (FromNom nomId term) Source # | |
Defined in Hyper.Syntax.Nominal | |
type HNodesConstraint (FromNom nomId term) constraint Source # | |
Defined in Hyper.Syntax.Nominal | |
type Rep (FromNom nomId term h) Source # | |
Defined in Hyper.Syntax.Nominal |
_FromNom :: forall nomId term h nomId term h. Iso (FromNom nomId term h) (FromNom nomId term h) nomId nomId Source #
class HasNominalInst nomId typ where Source #
nominalInst :: Prism' (typ # h) (NominalInst nomId (NomVarTypes typ) # h) Source #
type family NomVarTypes (t :: HyperType) :: HyperType Source #
class MonadNominals nomId typ m where Source #
getNominalDecl :: nomId -> m (LoadedNominalDecl typ # UVarOf m) Source #
data LoadedNominalDecl typ v Source #
A nominal declaration loaded into scope in an inference monad.
Instances
loadNominalDecl :: forall m typ. (HTraversable (NomVarTypes typ), HNodesConstraint (NomVarTypes typ) (Unify m), HasScheme (NomVarTypes typ) m typ) => (Pure # NominalDecl typ) -> m (LoadedNominalDecl typ # UVarOf m) Source #