Mikan
Safe HaskellNone
LanguageHaskell2010

Mikan.Syntax.Internal.Clause

Synopsis

Clauses

data Clause Source #

A clause is a list of patterns and the clause body.

The telescope contains the types of the pattern variables and the de Bruijn indices say how to get from the order the variables occur in the patterns to the order they occur in the telescope. The body binds the variables in the order they appear in the telescope.

clauseTel ~ permute clausePerm (patternVars namedClausePats)

Terms in dot patterns are valid in the clause telescope.

For the purpose of the permutation and the body dot patterns count as variables. TODO: Change this!

Constructors

Clause 

Fields

Instances

Instances details
Pretty Clause Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

GetDefs Clause Source # 
Instance details

Defined in Mikan.Syntax.Internal.Defs

Methods

getDefs :: (Monoid m, ExpandCase LiftedRep m) => (MetaId -> Maybe Term) -> (QName -> m) -> Clause -> m Source #

NamesIn Clause Source # 
Instance details

Defined in Mikan.Syntax.Internal.Names

Methods

namesAndMetasIn' :: Monoid m => (Either QName MetaId -> m) -> Clause -> m Source #

HasDefP Clause Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

Methods

hasDefP :: Clause -> Bool Source #

HasRange Clause Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

KillRange Clause Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

DropArgs Clause Source #

NOTE: does not work for recursive functions.

Instance details

Defined in Mikan.TypeChecking.DropArgs

Methods

dropArgs :: Int -> Clause -> Clause Source #

DropArgs FunctionInverse Source # 
Instance details

Defined in Mikan.TypeChecking.DropArgs

Free Clause Source # 
Instance details

Defined in Mikan.TypeChecking.Free.Generic

Methods

freeVars :: ComputeFree r => Clause -> Reader r (Collect r) Source #

PrettyTCM Clause Source # 
Instance details

Defined in Mikan.TypeChecking.Pretty

Methods

prettyTCM :: MonadPretty m => Clause -> m Doc Source #

NormaliseProjP Clause Source # 
Instance details

Defined in Mikan.TypeChecking.Records

InstantiateFull Clause Source # 
Instance details

Defined in Mikan.TypeChecking.Reduce

InstantiateFull FunctionInverse Source # 
Instance details

Defined in Mikan.TypeChecking.Reduce

EmbPrj Clause Source # 
Instance details

Defined in Mikan.TypeChecking.Serialise.Instances.Internal

Abstract Clause Source # 
Instance details

Defined in Mikan.TypeChecking.Substitute

Abstract FunctionInverse Source # 
Instance details

Defined in Mikan.TypeChecking.Substitute

Apply Clause Source # 
Instance details

Defined in Mikan.TypeChecking.Substitute

Apply FunctionInverse Source # 
Instance details

Defined in Mikan.TypeChecking.Substitute

Null Clause Source #

A null clause is one with no patterns and no rhs. Should not exist in practice.

Instance details

Defined in Mikan.Syntax.Internal.Clause

NFData Clause Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

Methods

rnf :: Clause -> () #

Generic Clause Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

Associated Types

type Rep Clause 
Instance details

Defined in Mikan.Syntax.Internal.Clause

Methods

from :: Clause -> Rep Clause x #

to :: Rep Clause x -> Clause #

Show Clause Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

Reify (QNamed Clause) Source # 
Instance details

Defined in Mikan.Syntax.Translation.InternalToAbstract

Associated Types

type ReifiesTo (QNamed Clause) 
Instance details

Defined in Mikan.Syntax.Translation.InternalToAbstract

PrettyTCM (QNamed Clause) Source # 
Instance details

Defined in Mikan.TypeChecking.Pretty

type Rep Clause Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

type ReifiesTo (QNamed Clause) Source # 
Instance details

Defined in Mikan.Syntax.Translation.InternalToAbstract

clausePerm :: Clause -> Maybe Permutation Source #

Computes the permutation from the clause telescope to the pattern variables.

Use as fromMaybe IMPOSSIBLE . clausePerm to crash in a controlled way if a de Bruijn index is out of scope here.

clauseArgs :: Clause -> Args Source #

Translate the clause patterns to terms with free variables bound by the clause telescope.

Precondition: no projection patterns.

clauseElims :: Clause -> Elims Source #

Translate the clause patterns to an elimination spine with free variables bound by the clause telescope.

Recursivity marks

data ClauseRecursive Source #

Does the clause body contain calls to any of the mutually recursive functions?

Constructors

YesRecursive

Definitely a call to a mutually recursive function.

NotRecursive

Definitely no call to a mutually recursive function.

MaybeRecursive

Don't know because the analysis has not run yet.

Instances

Instances details
Pretty ClauseRecursive Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

KillRange ClauseRecursive Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

EmbPrj ClauseRecursive Source # 
Instance details

Defined in Mikan.TypeChecking.Serialise.Instances.Internal

Null ClauseRecursive Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

NFData ClauseRecursive Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

Methods

rnf :: ClauseRecursive -> () #

Bounded ClauseRecursive Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

Enum ClauseRecursive Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

Generic ClauseRecursive Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

Associated Types

type Rep ClauseRecursive 
Instance details

Defined in Mikan.Syntax.Internal.Clause

type Rep ClauseRecursive = D1 ('MetaData "ClauseRecursive" "Mikan.Syntax.Internal.Clause" "Mikan-2.9.0-CZbYRMbHmng2A9zjJ31VFu" 'False) (C1 ('MetaCons "YesRecursive" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "NotRecursive" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MaybeRecursive" 'PrefixI 'False) (U1 :: Type -> Type)))
Show ClauseRecursive Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

Eq ClauseRecursive Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

type Rep ClauseRecursive Source # 
Instance details

Defined in Mikan.Syntax.Internal.Clause

type Rep ClauseRecursive = D1 ('MetaData "ClauseRecursive" "Mikan.Syntax.Internal.Clause" "Mikan-2.9.0-CZbYRMbHmng2A9zjJ31VFu" 'False) (C1 ('MetaCons "YesRecursive" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "NotRecursive" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MaybeRecursive" 'PrefixI 'False) (U1 :: Type -> Type)))