Agda-2.6.0.1: A dependently typed functional programming language and proof assistant

Safe HaskellNone
LanguageHaskell2010

Agda.TypeChecking.Rules.LHS.Problem

Contents

Synopsis

Documentation

data FlexibleVarKind Source #

When we encounter a flexible variable in the unifier, where did it come from? The alternatives are ordered such that we will assign the higher one first, i.e., first we try to assign a DotFlex, then...

Constructors

RecordFlex [FlexibleVarKind]

From a record pattern (ConP). Saves the FlexibleVarKind of its subpatterns.

ImplicitFlex

From a hidden formal argument or underscore (WildP).

DotFlex

From a dot pattern (DotP).

OtherFlex

From a non-record constructor or literal (ConP or LitP).

data FlexibleVar a Source #

Flexible variables are equipped with information where they come from, in order to make a choice which one to assign when two flexibles are unified.

Constructors

FlexibleVar 

Fields

Instances
Functor FlexibleVar Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

Methods

fmap :: (a -> b) -> FlexibleVar a -> FlexibleVar b

(<$) :: a -> FlexibleVar b -> FlexibleVar a #

Foldable FlexibleVar Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

Methods

fold :: Monoid m => FlexibleVar m -> m

foldMap :: Monoid m => (a -> m) -> FlexibleVar a -> m

foldr :: (a -> b -> b) -> b -> FlexibleVar a -> b

foldr' :: (a -> b -> b) -> b -> FlexibleVar a -> b

foldl :: (b -> a -> b) -> b -> FlexibleVar a -> b

foldl' :: (b -> a -> b) -> b -> FlexibleVar a -> b

foldr1 :: (a -> a -> a) -> FlexibleVar a -> a

foldl1 :: (a -> a -> a) -> FlexibleVar a -> a

toList :: FlexibleVar a -> [a]

null :: FlexibleVar a -> Bool

length :: FlexibleVar a -> Int

elem :: Eq a => a -> FlexibleVar a -> Bool

maximum :: Ord a => FlexibleVar a -> a

minimum :: Ord a => FlexibleVar a -> a

sum :: Num a => FlexibleVar a -> a

product :: Num a => FlexibleVar a -> a

Traversable FlexibleVar Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

Methods

traverse :: Applicative f => (a -> f b) -> FlexibleVar a -> f (FlexibleVar b)

sequenceA :: Applicative f => FlexibleVar (f a) -> f (FlexibleVar a)

mapM :: Monad m => (a -> m b) -> FlexibleVar a -> m (FlexibleVar b)

sequence :: Monad m => FlexibleVar (m a) -> m (FlexibleVar a)

Eq a => Eq (FlexibleVar a) Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

Methods

(==) :: FlexibleVar a -> FlexibleVar a -> Bool

(/=) :: FlexibleVar a -> FlexibleVar a -> Bool

Show a => Show (FlexibleVar a) Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

Methods

showsPrec :: Int -> FlexibleVar a -> ShowS

show :: FlexibleVar a -> String

showList :: [FlexibleVar a] -> ShowS

LensOrigin (FlexibleVar a) Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

LensHiding (FlexibleVar a) Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

ChooseFlex a => ChooseFlex (FlexibleVar a) Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

data FlexChoice Source #

Instances
Eq FlexChoice Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

Methods

(==) :: FlexChoice -> FlexChoice -> Bool

(/=) :: FlexChoice -> FlexChoice -> Bool

Show FlexChoice Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

Methods

showsPrec :: Int -> FlexChoice -> ShowS

show :: FlexChoice -> String

showList :: [FlexChoice] -> ShowS

Semigroup FlexChoice Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

Methods

(<>) :: FlexChoice -> FlexChoice -> FlexChoice

sconcat :: NonEmpty FlexChoice -> FlexChoice

stimes :: Integral b => b -> FlexChoice -> FlexChoice

Monoid FlexChoice Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

class ChooseFlex a where Source #

Methods

chooseFlex :: a -> a -> FlexChoice Source #

data ProblemEq Source #

A user pattern together with an internal term that it should be equal to after splitting is complete. Special cases: * User pattern is a variable but internal term isn't: this will be turned into an as pattern. * User pattern is a dot pattern: this pattern won't trigger any splitting but will be checked for equality after all splitting is complete and as patterns have been bound. * User pattern is an absurd pattern: emptiness of the type will be checked after splitting is complete.

Instances
Eq ProblemEq Source # 
Instance details

Defined in Agda.Syntax.Abstract

Methods

(==) :: ProblemEq -> ProblemEq -> Bool

(/=) :: ProblemEq -> ProblemEq -> Bool

Data ProblemEq Source # 
Instance details

Defined in Agda.Syntax.Abstract

Methods

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

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

toConstr :: ProblemEq -> Constr

dataTypeOf :: ProblemEq -> DataType

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

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

gmapT :: (forall b. Data b => b -> b) -> ProblemEq -> ProblemEq

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

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

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

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

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

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

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

Show ProblemEq Source # 
Instance details

Defined in Agda.Syntax.Abstract

Methods

showsPrec :: Int -> ProblemEq -> ShowS

show :: ProblemEq -> String

showList :: [ProblemEq] -> ShowS

KillRange ProblemEq Source # 
Instance details

Defined in Agda.Syntax.Abstract

PrettyTCM ProblemEq Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

Subst Term ProblemEq Source # 
Instance details

Defined in Agda.TypeChecking.Substitute

data Problem a Source #

The user patterns we still have to split on.

Constructors

Problem 

Fields

  • _problemEqs :: [ProblemEq]

    User patterns.

  • _problemRestPats :: [NamedArg Pattern]

    List of user patterns which could not yet be typed. Example: f : (b : Bool) -> if b then Nat else Nat -> Nat f true = zero f false zero = zero f false (suc n) = n In this sitation, for clause 2, we construct an initial problem problemEqs = [false = b] problemRestPats = [zero] As we instantiate b to false, the targetType reduces to Nat -> Nat and we can move pattern zero over to problemEqs.

  • _problemCont :: LHSState a -> TCM a
     
Instances
Subst Term (Problem a) Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

Show (Problem a) Source # 
Instance details

Defined in Agda.TypeChecking.Rules.LHS.Problem

Methods

showsPrec :: Int -> Problem a -> ShowS

show :: Problem a -> String

showList :: [Problem a] -> ShowS

data LHSState a Source #

State worked on during the main loop of checking a lhs. [Ulf Norell's PhD, page. 35]

Constructors

LHSState 

Fields

Orphan instances

PrettyTCM ProblemEq Source # 
Instance details