Copyright | (C) 2021 QBayLogic B.V. |
---|---|
License | BSD2 (see the file LICENSE) |
Maintainer | QBayLogic B.V. <devops@qbaylogic.com> |
Safe Haskell | None |
Language | Haskell2010 |
Random kind-directed generation of Kind and Type.
Synopsis
- genKindFrom :: forall m. (Alternative m, MonadGen m) => TyConMap -> UniqMap TyVar -> Kind -> CoreGenT m Kind
- genClosedKindFrom :: forall m. (Alternative m, MonadGen m) => TyConMap -> Kind -> CoreGenT m Kind
- genPolyTypeFrom :: forall m. (Alternative m, MonadGen m) => TyConMap -> UniqMap TyVar -> Kind -> CoreGenT m Type
- genClosedPolyType :: forall m. (Alternative m, MonadGen m) => TyConMap -> Kind -> CoreGenT m Type
- genMonoTypeFrom :: forall m. (Alternative m, MonadGen m) => TyConMap -> UniqMap TyVar -> Kind -> CoreGenT m Type
- genClosedMonoType :: forall m. (Alternative m, MonadGen m) => TyConMap -> Kind -> CoreGenT m Type
- genWithCodomain :: forall m. (Alternative m, MonadGen m) => Kind -> CoreGenT m KindOrType -> CoreGenT m KindOrType
Documentation
genKindFrom :: forall m. (Alternative m, MonadGen m) => TyConMap -> UniqMap TyVar -> Kind -> CoreGenT m Kind Source #
Generate a kind which is valid for the given TyConMap
. The kind may
contain free variables which are given in a UniqMap
, and is a valid fit
for a hole with the given kind.
N.B. Although the kind generated is a fit for the given hole, calling
a function like inferCoreKindOf
may return a different
kind. This is because quantifiers are both the introduction rule for kind
arrows and a kind former of their own right, so for the hole
Type -> Type
a generated fit might be
forall a. a -> a
but this is then inferred to have the kind
Type
genClosedKindFrom :: forall m. (Alternative m, MonadGen m) => TyConMap -> Kind -> CoreGenT m Kind Source #
Generate a closed kind (one without any free variables). If you want to
be able to use free variables in a kind, see genKindFrom
.
genPolyTypeFrom :: forall m. (Alternative m, MonadGen m) => TyConMap -> UniqMap TyVar -> Kind -> CoreGenT m Type Source #
Generate a polymorphic type which is valid for the given environment. The generated type should have the specified kind, and may contain the specified free variables.
genClosedPolyType :: forall m. (Alternative m, MonadGen m) => TyConMap -> Kind -> CoreGenT m Type Source #
Generate a polymorphic type which is valid for the given environment. The generated type should have the specified kind, and no free variables.
genMonoTypeFrom :: forall m. (Alternative m, MonadGen m) => TyConMap -> UniqMap TyVar -> Kind -> CoreGenT m Type Source #
Generate a monomorphic type which is valid for the given environment. The generated type should have the specified kind, and may contain the specified free variables.
genClosedMonoType :: forall m. (Alternative m, MonadGen m) => TyConMap -> Kind -> CoreGenT m Type Source #
Generate a monomorphic type which is valid for the given environment. The generated type should have the specified kind, and no free variables.
genWithCodomain :: forall m. (Alternative m, MonadGen m) => Kind -> CoreGenT m KindOrType -> CoreGenT m KindOrType Source #
Generate a function where the codomain is the given type / kind. Any other restrictions are enforced by the given generator. This can be used with generators for kinds and types.