| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Agda.TypeChecking.SizedTypes.Syntax
Contents
Description
Syntax of size expressions and constraints.
Synopsis
- newtype Offset = O Int
- newtype Rigid = RigidId {}
- newtype Flex = FlexId {}
- data SizeExpr' rigid flex
- type SizeExpr = SizeExpr' Rigid Flex
- data Cmp
- data Constraint' rigid flex = Constraint {}
- type Constraint = Constraint' Rigid Flex
- data Polarity
- data PolarityAssignment flex = PolarityAssignment Polarity flex
- type Polarities flex = Map flex Polarity
- emptyPolarities :: Polarities flex
- polaritiesFromAssignments :: Ord flex => [PolarityAssignment flex] -> Polarities flex
- getPolarity :: Ord flex => Polarities flex -> flex -> Polarity
- newtype Solution rigid flex = Solution {
- theSolution :: Map flex (SizeExpr' rigid flex)
- emptySolution :: Solution r f
- class Substitute r f a where
- type CTrans r f = Constraint' r f -> Either String [Constraint' r f]
- simplify1 :: (Pretty f, Pretty r, Eq r) => CTrans r f -> CTrans r f
- ifLe :: Cmp -> a -> a -> a
- compareOffset :: Offset -> Cmp -> Offset -> Bool
- class ValidOffset a where
- class TruncateOffset a where
- class Rigids r a where
- class Flexs flex a | a -> flex where
Syntax
Constant finite sizes n >= 0.
Instances
| Enum Offset # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax | |
| Eq Offset # | |
| Num Offset # | |
| Ord Offset # | |
| Show Offset # | |
| MeetSemiLattice Offset # | |
| Pretty Offset # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax | |
| TruncateOffset Offset # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax Methods truncateOffset :: Offset -> Offset # | |
| ValidOffset Offset # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax Methods validOffset :: Offset -> Bool # | |
| Negative Offset # | |
Defined in Agda.TypeChecking.SizedTypes.WarshallSolver | |
| Plus Offset Offset Offset # | |
| Plus Offset Weight Weight # | |
| Plus Weight Offset Weight # | |
| Plus (SizeExpr' r f) Offset (SizeExpr' r f) # | Add offset to size expression. |
Fixed size variables i.
Size meta variables X to solve for.
Size expressions appearing in constraints.
Constructors
| Const | Constant number |
| Rigid | Variable plus offset |
| Infty | Infinity |
| Flex | Meta variable |
Instances
Comparison operator, e.g. for size expression.
data Constraint' rigid flex #
Constraint: an inequation between size expressions,
e.g. X < ∞ or i + 3 ≤ j.
Constructors
| Constraint | |
Instances
type Constraint = Constraint' Rigid Flex #
Polarities to specify solutions.
What type of solution are we looking for?
data PolarityAssignment flex #
Assigning a polarity to a flexible variable.
Constructors
| PolarityAssignment Polarity flex |
Instances
| Pretty flex => Pretty (PolarityAssignment flex) # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax Methods pretty :: PolarityAssignment flex -> Doc # prettyPrec :: Int -> PolarityAssignment flex -> Doc # prettyList :: [PolarityAssignment flex] -> Doc # | |
type Polarities flex = Map flex Polarity #
Type of solution wanted for each flexible.
emptyPolarities :: Polarities flex #
polaritiesFromAssignments :: Ord flex => [PolarityAssignment flex] -> Polarities flex #
getPolarity :: Ord flex => Polarities flex -> flex -> Polarity #
Default polarity is Least.
Solutions.
Partial substitution from flexible variables to size expression.
Constructors
| Solution | |
Fields
| |
emptySolution :: Solution r f #
class Substitute r f a where #
Executing a substitution.
Minimal complete definition
Instances
| Substitute r f a => Substitute r f [a] # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax | |
| Ord f => Substitute r f (Solution r f) # | |
| Substitute r f a => Substitute r f (Map k a) # | |
| Ord f => Substitute r f (Constraint' r f) # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax Methods subst :: Solution r f -> Constraint' r f -> Constraint' r f # | |
| Ord f => Substitute r f (SizeExpr' r f) # | |
Constraint simplification
type CTrans r f = Constraint' r f -> Either String [Constraint' r f] #
simplify1 :: (Pretty f, Pretty r, Eq r) => CTrans r f -> CTrans r f #
Returns an error message if we have a contradictory constraint.
Printing
Wellformedness
class ValidOffset a where #
Offsets + n must be non-negative
Minimal complete definition
Methods
validOffset :: a -> Bool #
Instances
| ValidOffset Offset # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax Methods validOffset :: Offset -> Bool # | |
| ValidOffset (SizeExpr' r f) # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax Methods validOffset :: SizeExpr' r f -> Bool # | |
class TruncateOffset a where #
Make offsets non-negative by rounding up.
Minimal complete definition
Methods
truncateOffset :: a -> a #
Instances
| TruncateOffset Offset # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax Methods truncateOffset :: Offset -> Offset # | |
| TruncateOffset (SizeExpr' r f) # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax Methods truncateOffset :: SizeExpr' r f -> SizeExpr' r f # | |
Computing variable sets
The rigid variables contained in a pice of syntax.
Minimal complete definition
Instances
| (Ord r, Rigids r a) => Rigids r [a] # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax | |
| Ord r => Rigids r (Constraint' r f) # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax Methods rigids :: Constraint' r f -> Set r # | |
| Rigids r (SizeExpr' r f) # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax | |
class Flexs flex a | a -> flex where #
The flexibe variables contained in a pice of syntax.
Minimal complete definition
Instances
| Flexs SizeMeta HypSizeConstraint # | |
Defined in Agda.TypeChecking.SizedTypes.Solve Methods flexs :: HypSizeConstraint -> Set SizeMeta # | |
| (Ord flex, Flexs flex a) => Flexs flex [a] # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax | |
| Ord flex => Flexs flex (Constraint' rigid flex) # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax Methods flexs :: Constraint' rigid flex -> Set flex # | |
| Flexs flex (SizeExpr' rigid flex) # | |
Defined in Agda.TypeChecking.SizedTypes.Syntax | |