From 74be1a3a0c730315e69f8e75fd9f2a88861d8629 Mon Sep 17 00:00:00 2001 From: "grigorii.kirgizov" Date: Wed, 13 Feb 2019 16:09:31 +0300 Subject: [PATCH] Docs for lambdacalc: add images and slight corrections to text --- docs/content/example-lambdacalc-ext.md | 121 +++++++++--------- docs/content/img/ex-stlc/append.png | Bin 0 -> 16685 bytes docs/content/img/ex-stlc/checkTypeVars.png | Bin 0 -> 27415 bytes .../img/ex-stlc/checkTypeVars_rigid.png | Bin 0 -> 21584 bytes .../img/ex-stlc/checkVarConstraints.png | Bin 0 -> 46450 bytes docs/content/img/ex-stlc/dataform-table.png | Bin 0 -> 17440 bytes docs/content/img/ex-stlc/gen.png | Bin 0 -> 15548 bytes docs/content/img/ex-stlc/genHelper.png | Bin 0 -> 10643 bytes docs/content/img/ex-stlc/genHelper_forall.png | Bin 0 -> 17461 bytes .../img/ex-stlc/genHelper_noForall.png | Bin 0 -> 10456 bytes docs/content/img/ex-stlc/genTypeVars.png | Bin 0 -> 50023 bytes docs/content/img/ex-stlc/getType.png | Bin 0 -> 9842 bytes docs/content/img/ex-stlc/getType_Instance.png | Bin 0 -> 37167 bytes .../content/img/ex-stlc/getType_Typeclass.png | Bin 0 -> 32228 bytes docs/content/img/ex-stlc/inst.png | Bin 0 -> 13707 bytes docs/content/img/ex-stlc/instTypeVars.png | Bin 0 -> 50918 bytes docs/content/img/ex-stlc/inst_dummy.png | Bin 0 -> 11322 bytes .../img/ex-stlc/instanceCheck(1-2).png | Bin 0 -> 25944 bytes docs/content/img/ex-stlc/instanceCheck(3).png | Bin 0 -> 15038 bytes .../img/ex-stlc/instanceCheck(3-5).png | Bin 0 -> 40099 bytes .../img/ex-stlc/instanceCheck(4-5).png | Bin 0 -> 21539 bytes docs/content/img/ex-stlc/instanceCheck.png | Bin 0 -> 65873 bytes docs/content/img/ex-stlc/isSubset.png | Bin 0 -> 30637 bytes docs/content/img/ex-stlc/macro_Fun.png | Bin 0 -> 14157 bytes docs/content/img/ex-stlc/macro_Var.png | Bin 0 -> 10976 bytes .../img/ex-stlc/produceTypeConstraints.png | Bin 0 -> 29746 bytes docs/content/img/ex-stlc/recoverAll.png | Bin 0 -> 21934 bytes docs/content/img/ex-stlc/recoverTypeVars.png | Bin 0 -> 29926 bytes docs/content/img/ex-stlc/recover_forall.png | Bin 0 -> 26375 bytes docs/content/img/ex-stlc/recover_var.png | Bin 0 -> 31577 bytes .../img/ex-stlc/renameTypeVars_check.png | Bin 0 -> 20882 bytes .../img/ex-stlc/renameTypeVars_tryBind.png | Bin 0 -> 24916 bytes docs/content/img/ex-stlc/setCopy.png | Bin 0 -> 11693 bytes docs/content/img/ex-stlc/setToCons.png | Bin 0 -> 18984 bytes docs/content/img/ex-stlc/setToConsCopy.png | Bin 0 -> 9396 bytes docs/content/img/ex-stlc/set_removeDupl.png | Bin 0 -> 9674 bytes docs/content/img/ex-stlc/strengthCheck.png | Bin 0 -> 15333 bytes .../img/ex-stlc/subsumption_Forall.png | Bin 0 -> 21727 bytes docs/content/img/ex-stlc/subsumption_Fun.png | Bin 0 -> 11528 bytes docs/content/img/ex-stlc/subsumption_Pair.png | Bin 0 -> 9232 bytes .../img/ex-stlc/subsumption_leaves.png | Bin 0 -> 17291 bytes .../img/ex-stlc/subsumption_leaves_rigid.png | Bin 0 -> 15139 bytes .../img/ex-stlc/typeConstraints_discharge.png | Bin 0 -> 25984 bytes .../ex-stlc/typeConstraints_mergeSets(v2).png | Bin 0 -> 19135 bytes .../img/ex-stlc/typeConstraints_mergeSets.png | Bin 0 -> 17802 bytes docs/content/img/ex-stlc/typeOf_AnnExpr.png | Bin 0 -> 15998 bytes docs/content/img/ex-stlc/typeOf_App.png | Bin 0 -> 52543 bytes docs/content/img/ex-stlc/typeOf_Fix.png | Bin 0 -> 16543 bytes .../content/img/ex-stlc/typeOf_IfThenElse.png | Bin 0 -> 23979 bytes .../content/img/ex-stlc/typeOf_LamVarBind.png | Bin 0 -> 14568 bytes .../img/ex-stlc/typeOf_LamVarBind_anno.png | Bin 0 -> 17650 bytes .../content/img/ex-stlc/typeOf_LetVarBind.png | Bin 0 -> 16995 bytes .../img/ex-stlc/typeOf_LetVarBind_anno.png | Bin 0 -> 22070 bytes docs/content/img/ex-stlc/typeOf_Prototype.png | Bin 0 -> 25539 bytes .../img/ex-stlc/typeOf_PrototypeImpl.png | Bin 0 -> 64622 bytes docs/content/img/ex-stlc/typeOf_VarRef.png | Bin 0 -> 14915 bytes docs/content/img/ex-stlc/varTypeDuplicate.png | Bin 0 -> 26600 bytes 57 files changed, 62 insertions(+), 59 deletions(-) create mode 100644 docs/content/img/ex-stlc/append.png create mode 100644 docs/content/img/ex-stlc/checkTypeVars.png create mode 100644 docs/content/img/ex-stlc/checkTypeVars_rigid.png create mode 100644 docs/content/img/ex-stlc/checkVarConstraints.png create mode 100644 docs/content/img/ex-stlc/dataform-table.png create mode 100644 docs/content/img/ex-stlc/gen.png create mode 100644 docs/content/img/ex-stlc/genHelper.png create mode 100644 docs/content/img/ex-stlc/genHelper_forall.png create mode 100644 docs/content/img/ex-stlc/genHelper_noForall.png create mode 100644 docs/content/img/ex-stlc/genTypeVars.png create mode 100644 docs/content/img/ex-stlc/getType.png create mode 100644 docs/content/img/ex-stlc/getType_Instance.png create mode 100644 docs/content/img/ex-stlc/getType_Typeclass.png create mode 100644 docs/content/img/ex-stlc/inst.png create mode 100644 docs/content/img/ex-stlc/instTypeVars.png create mode 100644 docs/content/img/ex-stlc/inst_dummy.png create mode 100644 docs/content/img/ex-stlc/instanceCheck(1-2).png create mode 100644 docs/content/img/ex-stlc/instanceCheck(3).png create mode 100644 docs/content/img/ex-stlc/instanceCheck(3-5).png create mode 100644 docs/content/img/ex-stlc/instanceCheck(4-5).png create mode 100644 docs/content/img/ex-stlc/instanceCheck.png create mode 100644 docs/content/img/ex-stlc/isSubset.png create mode 100644 docs/content/img/ex-stlc/macro_Fun.png create mode 100644 docs/content/img/ex-stlc/macro_Var.png create mode 100644 docs/content/img/ex-stlc/produceTypeConstraints.png create mode 100644 docs/content/img/ex-stlc/recoverAll.png create mode 100644 docs/content/img/ex-stlc/recoverTypeVars.png create mode 100644 docs/content/img/ex-stlc/recover_forall.png create mode 100644 docs/content/img/ex-stlc/recover_var.png create mode 100644 docs/content/img/ex-stlc/renameTypeVars_check.png create mode 100644 docs/content/img/ex-stlc/renameTypeVars_tryBind.png create mode 100644 docs/content/img/ex-stlc/setCopy.png create mode 100644 docs/content/img/ex-stlc/setToCons.png create mode 100644 docs/content/img/ex-stlc/setToConsCopy.png create mode 100644 docs/content/img/ex-stlc/set_removeDupl.png create mode 100644 docs/content/img/ex-stlc/strengthCheck.png create mode 100644 docs/content/img/ex-stlc/subsumption_Forall.png create mode 100644 docs/content/img/ex-stlc/subsumption_Fun.png create mode 100644 docs/content/img/ex-stlc/subsumption_Pair.png create mode 100644 docs/content/img/ex-stlc/subsumption_leaves.png create mode 100644 docs/content/img/ex-stlc/subsumption_leaves_rigid.png create mode 100644 docs/content/img/ex-stlc/typeConstraints_discharge.png create mode 100644 docs/content/img/ex-stlc/typeConstraints_mergeSets(v2).png create mode 100644 docs/content/img/ex-stlc/typeConstraints_mergeSets.png create mode 100644 docs/content/img/ex-stlc/typeOf_AnnExpr.png create mode 100644 docs/content/img/ex-stlc/typeOf_App.png create mode 100644 docs/content/img/ex-stlc/typeOf_Fix.png create mode 100644 docs/content/img/ex-stlc/typeOf_IfThenElse.png create mode 100644 docs/content/img/ex-stlc/typeOf_LamVarBind.png create mode 100644 docs/content/img/ex-stlc/typeOf_LamVarBind_anno.png create mode 100644 docs/content/img/ex-stlc/typeOf_LetVarBind.png create mode 100644 docs/content/img/ex-stlc/typeOf_LetVarBind_anno.png create mode 100644 docs/content/img/ex-stlc/typeOf_Prototype.png create mode 100644 docs/content/img/ex-stlc/typeOf_PrototypeImpl.png create mode 100644 docs/content/img/ex-stlc/typeOf_VarRef.png create mode 100644 docs/content/img/ex-stlc/varTypeDuplicate.png diff --git a/docs/content/example-lambdacalc-ext.md b/docs/content/example-lambdacalc-ext.md index b2ba6c65..88e6546f 100644 --- a/docs/content/example-lambdacalc-ext.md +++ b/docs/content/example-lambdacalc-ext.md @@ -1,4 +1,4 @@ -## Typechecking Lambda Calculus with Extensions +# Typechecking Extended Lambda Calculus Simply Typed Lambda Calculus (STLC) is a famous example favored by textbook authors. This sample demonstrates how a classical type checking algorithm (Hindley-Milner[^hm]) designed for this language can be implemented using Code Rules. @@ -19,7 +19,7 @@ The required extensions for GHC are: The dataform table is trivial, there're two terms used in Cons-list implementation (`Cons` and `Nil`), term `Constraint` used in the part of type system concerned with typeclasses, and other expected terms for types (`Fun` for function type, `Forall` for universal types etc.). -![DataForm Table](img/dataform-table.png) +![DataForm Table](img/ex-stlc/dataform-table.png) _(dataform table)_ There is only one query of kind `TYPECHECK`, which launches types recovery. All the type checking is done by the automatic productions “on start”. @@ -27,17 +27,17 @@ There is only one query of kind `TYPECHECK`, which launches types recovery. All -### Basic Hindley-Milner Type Inference +## Basic Hindley-Milner Type Inference The basic type inference is covered by the several handlers: handler `typeOf` that contains most of the typing rules, handler `forall` covers typing of universal types, `recover` handler is concerned with translating inferred types back to SNodes representation, and `consList` is an utility handler. - + - + - + #### Cons-list @@ -45,7 +45,7 @@ The basic type inference is covered by the several handlers: handler `typeOf` th Handler `consList` is a straightforward implementation of Cons-list, present in all functional programming languages. Implementation consists of `Cons` and `Nil` data forms, `append` constraint and two rules that process it, one for common case and one for base case (when one of the input lists is empty). There's also a helper function, that translates lists embedded in Code Rules to these ad-hoc Cons-lists. -![append rule](img/append.png) +![append rule](img/ex-stlc/append.png) _(single rule implementing cons-list)_ @@ -60,7 +60,7 @@ Fresh type variables are represented simply by fresh logical variables. For example, this is a rule for lambda-bindings: -![typeOf_LamVarBind rule](img/typeOf_LamVarBind.png) +![typeOf_LamVarBind rule](img/ex-stlc/typeOf_LamVarBind.png) _(typing rule for a lambda-binding)_ It's important to note that these variables can later be bound to something during the process of type inference, and so just before generalization on `let` we need to additionally check that the variables are indeed free. @@ -71,19 +71,19 @@ Typing rules for the most of the nodes are straightforward: rules match on `type There're additional conditions on some of the rules, because their handling depends on whether these nodes are annotated or not. The case with annotations is processed in another handler `annotation`. For example, in the case of unannotated let-binding we simply generalize over all free variables in the bound expression: -![typeOf_LetVarBind rule](img/typeOf_LetVarBind.png) +![typeOf_LetVarBind rule](img/ex-stlc/typeOf_LetVarBind.png) _(typing rule for a let-binding)_ In the typing rule for variable occurrences they are instantiated with a help of `inst` constraint. It also returns a list of fresh instantiated variables. This rule ensures that terms with universal types can actually be used polymorphically. -![typeOf_VarRef rule](img/typeOf_VarRef.png) +![typeOf_VarRef rule](img/ex-stlc/typeOf_VarRef.png) _(typing rule for a variable reference)_ The type checking for `if-then-else` ensures that the types of both branches unify, and assigns the resulting unified type to the whole expression. -![typeOf_IfThenElse rule](img/typeOf_IfThenElse.png) +![typeOf_IfThenElse rule](img/ex-stlc/typeOf_IfThenElse.png) _(typing rule for conditional expression)_ The most interesting rule here is for function application. Besides instantiating function, which may has polymorphic type, it also checks that the function can be applied to the argument, according to the types. @@ -92,13 +92,13 @@ The most interesting rule here is for function application. Besides instantiatin The subsumption relation on types, that checks this, comes from the need to account for type annotations and is covered later. In short, it handles the case when the actual argument has a more general (more polymorphic) type, than type of the formal parameter. In other words, when the parameter's type is _subsumed_ by the argument's type. In the basic STLC formulation we would have here a usual unification between parameter's type and actual argument's type. -![typeOf_App rule](img/typeOf_App.png) +![typeOf_App rule](img/ex-stlc/typeOf_App.png) _(typing rule for function application)_ Finally, the `fix` operator, which represents general recursion, is given the type `∀a. (a → a) → a`. -![typeOf_Fix rule](img/typeOf_Fix.png) +![typeOf_Fix rule](img/ex-stlc/typeOf_Fix.png) _(typing rule for `fix` operator)_ @@ -108,12 +108,12 @@ A separate handler is dedicated to producing and instantiating universal types, The handler declares two general constraints `gen` and `inst` together with several helper constraints. -###### Generalization +##### Generalization `gen` constraint returns universal type through the logical variable passed as the first argument, accepts the type to generalize in the second argument and the type variables to generalize over (collected with `newTypeVars` constraint) in the third. `gen` activates 2 helper constraints: the first processes type vars one by one (that's where the main work happens), and the second handles several different cases depending on the form of type that is generalized. -![gen rule](img/gen.png) +![gen rule](img/ex-stlc/gen.png) _(rule for a type generalization)_ Generalization of a single free type variable consists from two steps. @@ -122,29 +122,29 @@ In short, we need to get the type constraints, that the type variable collected The second step is a substitution of its occurrences in the generalized type with references to a fresh type variable playing a role of its definition. This is accomplished simply by a unification of free type var with `VarRef` data form, pointing to this fresh type var. -![genTypeVars rule](img/genTypeVars.png) +![genTypeVars rule](img/ex-stlc/genTypeVars.png) _(generalization of a single type variable)_ The fresh type variables are collected and then passed to the second helper constraint, that actually produces universal type. It may appear, that in the type there're no free type variables to generalize over. In this case we shouldn't produce universal type. -![genHelper_noForall rule](img/genHelper_noForall.png) +![genHelper_noForall rule](img/ex-stlc/genHelper_noForall.png) _(not generalizing with no free type variables)_ In another case, when the generalized type is itself a universal type we merge the sets of the generalized type variables to avoid nested universal types. -![genHelper_forall rule](img/genHelper_forall.png) +![genHelper_forall rule](img/ex-stlc/genHelper_forall.png) _(generalization of a universal type)_ And in the common case we just produce a universal type with processed type variables. -![genHelper rule](img/genHelper.png) +![genHelper rule](img/ex-stlc/genHelper.png) _(generalization, common case)_ For example, generalizing a type `Fun(arg: A res: B)`, where `A` and `B` are free terms (type variables) we will get `Forall(type: Fun(arg: VarRef(def: C) res: VarRef(def: D)) typeVars: [C, D])`, where `C` and `D` are fresh variables. -###### Instantiation +##### Instantiation Instantiation of a universal type mirrors generalization of a type. `inst` constraint also depends on the form of a type being instantiated. @@ -152,12 +152,12 @@ There're two cases: the trivial case, when the instantiated type is not a univer In the former case we essentially do nothing, and return the same type and an empty list of instantiated type variables. -![inst_dummy rule](img/inst_dummy.png) +![inst_dummy rule](img/ex-stlc/inst_dummy.png) _(instantiating non-universal type)_ The latter case uses a helper constraint, that processes bound type variables from universal type one by one. -![inst rule](img/inst.png) +![inst rule](img/ex-stlc/inst.png) _(instantiating universal type)_ Instantiation of a single bound type variable has two steps. @@ -166,7 +166,7 @@ It is done with a call to `subst`, a part of the internal API. The second step is concerned with typeclass constraints. What we need to do here is to instantiate (copy, really) the set of typeclass constraints for the freshly instantiated type variable. This variable is collected to the list of instantiated type variables for the caller. -![instTypeVars rule](img/instTypeVars.png) +![instTypeVars rule](img/ex-stlc/instTypeVars.png) _(instantiating single type variable)_ @@ -174,23 +174,23 @@ _(instantiating single type variable)_ The handler `recover` is responsible for translating the calculated types to SNode form and is pretty straightforward. On each typeable node a `recover` constraint is activated. SNodes representing types are constructed using quotations. -![recoverAll rule](img/recoverAll.png) +![recoverAll rule](img/ex-stlc/recoverAll.png) _(starting type recovery)_ The rules for type variables ensure that every one of them has an assigned name. For variables without names assigned in type annotations the second rule will assign them with a help of `VarNames` utility. -![recover_var rules](img/recover_var.png) +![recover_var rules](img/ex-stlc/recover_var.png) _(recover type variable)_ The most involved rule is for universal type, because it requires to recover and collect in a list SNodes representing type variables. Analogously, for each type variable we need to recover and collect its typeclass constraints. -![recover_forall rule](img/recover_forall.png) +![recover_forall rule](img/ex-stlc/recover_forall.png) _(recover universal type)_ -![recoverTypeVars rule](img/recoverTypeVars.png) +![recoverTypeVars rule](img/ex-stlc/recoverTypeVars.png) _(recover bound type variable from universal type)_ @@ -199,7 +199,7 @@ Next, we turn our attention to the extensions to STLC. -### Type Annotations +## Type Annotations Extension of STLC with type annotations demonstrates two important points: a usage of Code Rules macros and an implementation of a relation between types in the form of constraint. Relations on types are present in many type systems, and probably the most widespread example is a subtyping relation (e.g. `isSubtype(type1, type2)`). As a matter of fact, the `subsumed` relation, presented here, is a form of subtyping too, as explained below. @@ -213,12 +213,12 @@ In this lambda calculus there's a single macro table called `types` for translat A typical example of a macro is for the function type. It recursively invokes macros for its argument and result types. -![](img/macro_Fun.png) +![](img/ex-stlc/macro_Fun.png) _(macro for a function type)_ Macro for a type variable produces a fresh logical variable each time it is invoked. -![](img/macro_Var.png) +![](img/ex-stlc/macro_Var.png) _(macro for a type variable)_ As it can be invoked several times, we need to unify different logical variables emitted for a single type variable. @@ -226,12 +226,15 @@ It is done in handler `annotation`. We also emit a special constraint to carry type variable's name. It's needed for outputting types in handler `recover` with expected names. -![](img/varTypeDuplicate.png) +![](img/ex-stlc/varTypeDuplicate.png) _(unifying duplicate logical variables)_ + +#### Typing Rules for Annotations + All these macros are used in the handler `annotation` in a rule that produces a single constraint carrying the type from annotation: -![](img/getType.png) +![](img/ex-stlc/getType.png) _(usage of a macro expansion)_ @@ -239,18 +242,18 @@ Handler `annotation` defines several important rules. Two of them are concerned with special handling of annotated bindings (let-binding and lambda-binding). For lambda-binding we simply propagate the type from annotation, because at this point, at the introduction of a new variable, there're no constraints on it to check against. -![](img/typeOf_LamVarBind_anno.png) +![](img/ex-stlc/typeOf_LamVarBind_anno.png) _(annotated lambda-binding just assigns to its variable type from the annotation)_ The case of let-binding is different. Here we need to check the annotation against the inferred type of the bound expression. This is done with a help of `subsumed` constraint, explained below. It is the only difference of this typing rule from a rule for unannotated let-binding. -![](img/typeOf_LetVarBind_anno.png) +![](img/ex-stlc/typeOf_LetVarBind_anno.png) _(annotated let-binding checks annotation against inferred type with `subsumed`)_ Another rule is concerned with annotated expressions. In this case we check against the type of inferred expression, analogously to the rule for let-binding. -![](img/typeOf_AnnExpr.png) +![](img/ex-stlc/typeOf_AnnExpr.png) _(annotated expression also includes `subsumed` check)_ In essence, this is all that is special about type annotations. @@ -323,14 +326,14 @@ The most important part comes after that: we need to check that the types, to wh The required checks differ for these two rules. That's where the asymmetric nature of relation manifests itself. For details, the reader can proceed to an example for polymorphic pair types described below or, for a full treatment, to the original paper.[^spjones2007] -![](img/subsumption_Forall.png) +![](img/ex-stlc/subsumption_Forall.png) _(subsumption rules for universal types)_ Another important case is that of leaves, when one of the types is either a type variable reference or a free type variable (either instantiated or initially free, that is, not bound during the process of type inference). In the case of free type variable we unify it with another term, essentially instantiating type variable to it. If there will be _conflicting instantiations of the same type variable to different types_, unification will fail and halt typechecking. -![](img/subsumption_leaves.png) +![](img/ex-stlc/subsumption_leaves.png) _(leaves in subsumption are unified)_ But if the second term is a free type variable too, then unification will succeed and we may need to perform additional check. @@ -345,19 +348,19 @@ So it is performed only in the rules for universal types. In the case of variable references (that is, type variables bound by some universal quantifier) they must match because these variables are _rigid_, and they can't be unified. This case is essentially the same as in Haskell, where, for example, two type variables with different names entered by a user can't be unified. -![](img/subsumption_leaves_rigid.png) +![](img/ex-stlc/subsumption_leaves_rigid.png) _(rigid type variables in subsumption are checked for equality)_ Subsumption rule for function types proceeds by checking argument and result types. It is analogous to typical subtyping rules for function types: argument types are checked contravariantly, result types are checked covariantly. -![](img/subsumption_Fun.png) +![](img/ex-stlc/subsumption_Fun.png) _(subsumption rule for function type)_ Rule for a pair type is straightforward. -![](img/subsumption_Pair.png) +![](img/ex-stlc/subsumption_Pair.png) _(subsumption rule for pair type)_ That's how implementation of a complex relation on types can look like in Code Rules. @@ -365,7 +368,7 @@ That's how implementation of a complex relation on types can look like in Code R -### Typeclasses +## Typeclasses Haskell typeclasses are one of the most important and complex features of its type system, that distinguishes Haskell among other well-known functional languages. Implementing typeclasees using Code Rules shows that it has expressive power that is sufficient even for the advanced type systems. @@ -409,7 +412,7 @@ Programmer can manipulate the set with a handle. The implementation consists of a single rule that maintains the set invariant, i.e. that it can't contain two equal elements. -![](img/set_removeDupl.png) +![](img/ex-stlc/set_removeDupl.png) _(set data structure implementation)_ The beauty of such representation of a set is that merging sets comes essentially for free and, moreover, is performed implicitly. @@ -432,10 +435,10 @@ Handler `set` also declares several utility functions with straightforward imple - making a Cons-list out of a set while preserving the original set; - testing whether one set is a subset of another. -![](img/setCopy.png) +![](img/ex-stlc/setCopy.png) _(copy a set)_ -![](img/isSubset.png) +![](img/ex-stlc/isSubset.png) _(test whether one set is a subset of another)_ @@ -458,7 +461,7 @@ And that's where constraint reactivation again helps us, now for `typeConstraint The following rule is a top rule in handler `typeConstraints`. It ensures, that each type variable has a single set of all its typeclass constraints. -![](img/typeConstraints_mergeSets(v2).png) +![](img/ex-stlc/typeConstraints_mergeSets(v2).png) _(merging Constraints sets)_ @@ -472,13 +475,13 @@ There're two cases: it either remains free until the point of generalization (i. When free type variable becomes bound to something, we need to check that all typeclass constraints collected up to this point are satisfied. Due to constraint reactivation, another rule that starts this check will be triggered. -![](img/typeConstraints_discharge.png) +![](img/ex-stlc/typeConstraints_discharge.png) _(rule playing a role of entry point to typeclass constraints check)_ There're 2 cases: it can be bound to a ground type (e.g. function type, Bool) or a type variable reference. The cases differ and require different checks. -![](img/checkVarConstraints.png) +![](img/ex-stlc/checkVarConstraints.png) _(check collected typeclass constraints for a type variable: 2 cases)_ ##### Strength Check @@ -490,7 +493,7 @@ In other words, the type variable can't be instantiated to a type (here, type va To check it we need to ensure that for each Constraint from the set of collected ones there's a matching Constraint to satisfy it. It can be done with a `isSubset` check. -![](img/strengthCheck.png) +![](img/ex-stlc/strengthCheck.png) _(strength check: checking the restrictiveness of two Constraint sets)_ For example, given a function application `f x` with types `x ∷ C1 t ⇒ t` (`t` is bound somewhere else) and `f ∷ ∀ a.(C1 a, C2 a) ⇒ a → a`, the strength check will clearly fail, because the Constraints set `{C1}` on the type variable `t` _is not more restrictive_ than the set `{C1, C2}`. The set `{C1, C2}` is not a subset of `{C1}`. @@ -500,7 +503,7 @@ For example, given a function application `f x` with types `x ∷ C1 t ⇒ t` (` The second case of a usual type is more intuitive and more common, but its implementation is a bit more involved. The first two rules in it do nothing special: the first makes a list out of the set and the second traverses it, triggering actual instance check for each typeclass constraint on a type. -![](img/instanceCheck(1-2).png) +![](img/ex-stlc/instanceCheck(1-2).png) _(instance check, first two rules)_ The next two rules try to find a matching instance among all instances of the typeclass with a help of `instance` constraint. @@ -518,8 +521,8 @@ The last rule simply fails in case when no matching instance is found. The typecheck is failed by triggering `eval(false)`. Of course, it isn't the best mechanism for reporting type system errors, but it's a temporary solution. - -![](img/instanceCheck(3-5).png) + +![](img/ex-stlc/instanceCheck(3-5).png) _(instance check: searching for a typeclass instance for a type)_ @@ -528,17 +531,17 @@ _(instance check: searching for a typeclass instance for a type)_ Typeclasses require only a little change to `forall` handler. In the rule for generalization of a type variable we have to add only a single production that moves collected typeclass constraints (in `typeConstraints`) to a definition (`tdefConstraints`). -![genTypeVars rule](img/genTypeVars.png) +![genTypeVars rule](img/ex-stlc/genTypeVars.png) _(generalization over a single type variable: notice activation of `produceTypeConstraints`)_ -![](img/produceTypeConstraints.png) +![](img/ex-stlc/produceTypeConstraints.png) _(collected typeclass constraints become part of the type variable definition)_ The constraint `tdefConstraints` is used in an instantiation of a type variable. We essentially do the opposite: we copy typeclass constraints from the definition (`tdefConstraints`) to a new set (in `typeConstraints`) for a freshly instantiated type variable. -![instTypeVars rule](img/instTypeVars.png) +![instTypeVars rule](img/ex-stlc/instTypeVars.png) _(instantiation of a single type variable: notice activation of `typeConstraints` with a copied set)_ @@ -550,18 +553,18 @@ It ensures the well-formedness of typeclass and instance declarations, and defin The rule for typeclass declaration only processes declaration of type variable declared in a typeclass and produces an auxiliary constraint carrying typeclass name, used in `recover` handler. -![](img/getType_Typeclass.png) +![](img/ex-stlc/getType_Typeclass.png) _(processing typeclass declaration)_ The rule for instance declaration is also straightforward. It expands a macro for its type scheme and produces `instance` constraint that is used in `instanceCheck`. -![](img/getType_Instance.png) +![](img/ex-stlc/getType_Instance.png) _(processing instance declaration)_ Typeclass contains a number of function Prototype declarations (i.e. pairs of symbol and type). The rule for them just produces their type given type annotation. -![](img/typeOf_Prototype.png) +![](img/ex-stlc/typeOf_Prototype.png) _(producing type of a Prototype in a typeclass)_ Instance, correspondingly, contains Prototype implementations, and they require the most involved rule. @@ -569,7 +572,7 @@ It checks that the actual type of the implementation agrees with a Prototype's t The first step of this is to instantiate the generic Prototype to the Instance type scheme. The second step is to actually check that the types agree, that is, the type of the implementation does not restrict the Prototype's type (in other words, it is more general). It is checked using subsumption relation. -![](img/typeOf_PrototypeImpl.png) +![](img/ex-stlc/typeOf_PrototypeImpl.png) _(checking correctness of Prototype implementations)_ That is everything there is to the typechecking of typeclasses. @@ -598,5 +601,5 @@ They're implemented in a way to be triggered automatically, while other rules he [^thih]: See [Mark P. Jones. "Typing Haskell in Haskell"](https://web.cecs.pdx.edu/~mpj/thih/thih.pdf). - + diff --git a/docs/content/img/ex-stlc/append.png b/docs/content/img/ex-stlc/append.png new file mode 100644 index 0000000000000000000000000000000000000000..6104c8e65ab595e8b1bae051d40f44197a8f2361 GIT binary patch literal 16685 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 I(>3aU0MOx9-~a#s literal 0 HcmV?d00001 diff --git a/docs/content/img/ex-stlc/checkVarConstraints.png b/docs/content/img/ex-stlc/checkVarConstraints.png new file mode 100644 index 0000000000000000000000000000000000000000..9e3a166c918726b1788d955b4e962ed295e87ed2 GIT binary patch literal 46450 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 g#3n>8V^f>J6i|%-ppu{}57bUz( zQX-_w`p%eZLWVFT1;BCL-6_0LdOqBR4yD5ThT66m0IjU|{K#G9lCPlg$aAU}-dB^n zhK_uVVW?qQ&7*P@LlZmxR5Zxo0^r!#i2qUQ;f>|xB5wf$j?wQE?RPR1+vo{G)yTAB zFyD*hbDE>5x`=ikz}8zO06#a%o1d@fm4t-1eh;*{kn&iC>EF#W&fXfJ=8swomCRuR zECC&)%x<*n)6Nsu_U@4-l-F)~Sv$9DqvwGsik#NkRJ-mr)W!F@wQH-rtf4u0Hs2bn zcnyC6N)9a8;Lx8xSf7gbRXKa^Zjk{pg0ItWKX{)5GOoXj9n0@tR0a7n87OKBfHht8 zMAb_k0DNA}wfj~`ep2RLc;T0EDOrrWxB2rrC@G}X@^<0!3b*dgwU}Ft3Sgg)*uRGC zv9tIhOeVMnThP8dtOcazc;f*+KjKOEvXcxvuV}4u1GP-(p~!IS&qp>ldrXJ)-K)-r z$4#I&Acvs=X!pGGgc3gF)#xx*42MqW309t8mq@_pd&dI4Toj~4STzIM{G`R?g_&M) zbQ}QB1buE-v)zDTpF_;yi}2kUmjQ?Ex_mt`i}J_d^MUi~ha7eX znXaFN>DiWtzrP7&|2Q&6VU~D);gZhM??+(pJ?wo_>NVZLNuKOUzd}c^qAw z0Lj8$^06+>O;dbyvl64m$9UK!{HdarYXI)H%fOBrFG-ipOagKLHI3>I+m2)welw-n zuYN6z`ntH0k?3n zhpF=?-H5lPx{gX1oa$??!0_=fRMBJjYkAMJ4<;39qF6pvOi~=&8yX_r)!PE+zD^)z zav}HKTF_nMQAYNN8w*G${RSkOd$%C1B}c*}CM$Y>>lTm@-qjRjD0x*b4v*TB!J9 zTutJnESQb>@3rG)ttHMj@E%m}gb(iJ~*)4CZB{k1q8Sdg zp|2oh@=`kb;ypr=CP^XonQ?}L$78cCYUBE6ACJGWOa?{gmZ?>)(FZij^W^-F%byuv z?%D?Er=iGUW^%8^5JBP+U4Uvc>*v{P4W^ybJl3?+H|C z-q@x*+6c)M#z!Rdn(d{ zB2j0yj&sgiNh7p$?{X$+sb%9|x)$cBZ%xMM=e$pgi6gi>v|i+bJH?v?*7OUzi=BB; z5KIc)|1)G6nWYc-k$8W_gIKuivxHRP~&^Y8{GEWuvlUM#CK*W%pYid zIxu`OdAmG4HuBa|YrN`YOyWJjPZPO#vZ2BsA47G7IjenC$$?+FjJNum`{AG28AD>Z zCx=>6@h|fymnVS-un^`~dv(+Z9lQHtWrfrNv-_^6`nypWOumX)N<>9L!ncw0FxdIl{XQt&(=87)I5ekVXtbuAE8CK0 z5+Xd&P{QIC_r?!KGdHHXR^Yga5o4TR_SPeMk=#xpWSFMh`|?`;<$1g-++x$${6k7%==z&E9?sz zlz3f@65o2~u9h{crhXIk{2zOQZ{*ki@5zj`4bmF%%(kpYSVW23%< zo^JQUqC@S4-iS%lBXf&$@!*Sl-OlqM;zur&x7%Ut-tKeIv~N972-FQr4XDXsBmAz= zA@tX7O<|_2$VZoD7gDW=-MM?ZGh7m_%YMp+^8H-qIIgSI3U;rDj3LdTHo)-abh>N< z12SHR%j+RylDCvI-C$KmUG1-22jekMo1it#GE z5*b_9MB8xzK3GHXsG~QS5~MS?)Yvr_3p66_N2X6ZG?$ep4wi}WebsozM8nD4jZMp& zDjG(!%zIhdh$|tDhw)BIimB(1yI&yLS6z!wQeCV(l9Y zOcz73DX@Xr&VhZBRp4MKxbqz66t(n|5lLX(GFrEuEwA&QO4H#u78VAv4a<4~*{61f zrQ8$twPyo8iFA_b(o)thQO1uMV(biI_1PTQIxVsfqQxH@m=&Ni%Rh(?A>Z!ZdGgM- z0eaD$MiOzBt-?J!S;N=P@uoSg1`F%p=6Yx>d%pbnC`TUypYk9apZ^`#%`BupXJ6o{ zwzt%9LLfdZca%#2v8j7%g_7DN*V4=q#ZFgI1gFbYo6aiA?xXvaDMo!$gtsEK9F_H&^pM>)$_EN-2E|P=HJ5>VT8AaRyF1(>+R`4<_YiG!;R_Z7!O`r+C|5o;qemsk6bn#olrR6Yzd}lKnm zu{&A%7!6^L$Q)HyTr9)anE-|wMt5#pw+lRp^|16@2tK!ZU}I8kL8=Xk;J==nE~Y>`%^Zq16`s8Sq~JR@*Ep+*O-P z!+x+pusGyvePM1ehi;_Ij&bL?@YvMLtDQ}d-1`ESz>tp1^X7WW0Z zZddWGU*IXa{IpGY^@Szfp^GFK8H@p`x5}W&nqW&Hzho?%d=b;%ApW6{ZTy#z&JNfU z{mG`EAJj#EvKy>(h3pQ@3MpIRfGPtihTF=#CDBP)FnhOLb{H4; zQs>V{H#-lemIA3R4!mM>-^oxt+M^2Xn!Q}%KS-!!d&wo6WBBZS_A$TEJ%3gXSav2Ex0MgqE=B#0Ksg z@D&BuMB>5@=6KOjKEX0^<-}VA=}j8bFd7E8{bL=WPX}635XNy7o`shiTJxeZo;pUaCR6*Inkau!xOXyhOG{qgm*H@bMt}io96ZnFWX{eTU zY;DQuR9b953n-_YmHT$g=1#%=lrh}JnH6v+Vy8icAuAKllsH!z;9>#Bp2+qWN?p(p zQUO&op7s-#I<0m7Kxc>N^pZ;Hza6;yvQ>JwMo}p*^U3VRja6*|^k^0L<-io&ShCM1 zTXB|#BGMP81OINaymSIrp5i~!ub*4U+tG})sqf0WvRJOM%inKdLhQ@CO%s1)O}jrE zF!s=Klbssw)&Hrux3E5?X2<n59we+; z>#)fuAJ`~9NED9xJ<$5fy?JH-Qm3{?xoyo+AWN|F3x^;sC zCFp(|D_-rX;DX!R3cY*bk#o<20A-C=E;&Tlo#T_GKVF8+5eG!}bDY%J!~|qkVmqEq z5|dQc_Py?^E8WcR*x7;Y`tTM^`dr>x$z??{rc^!F{PAQte)2N2XD_I*I+;1hbSaqC zFA8=sN6G&!)xkA-U_DaZo2>WO0s~b0p1!zeD!NN6+cd@t@d@2J;-eS5>NKvd*OxmQ z1~?7}Na4d=wYXlvttEK%wQU)ams)y)Bl}sr3SsdR1rIEEJI_n#sgxU`Te9{M;%WCh zJ_mEu#O={6P|t&=`O9rbkAe5aHz!}?ZiJzs!hj^qqtp2kwMn%;m-6@Dsq}Gl*M;`W z6}&`Q_PUhM2w7`W6PQ%xDhOb^ck?b1AI|yfyZJQIU=t8FVb7Or^m;k(*4G+kJRA?F za!@{1PzhytHZDP)ipxAQK~8qLxn!zOH5Sf1m-4u{XLz@H;SQ?A=T4K8h&yX|J$#TjYaTLw z*UQqRdaXI{_+?!08bv4>g9| zl1>XovkZ(-aqf<~@Lt{fVIU`g?!rYzUjoksUlzr)#~;px2jVu?B=@Fh)j&P}#T4%O z=R5g_CXA2uG0yj!)0tz|7T{GNY799IX~(&iJ*6DAJei2vY3yj;{Nn{<1<3JcxI%Gk zZdb>_vxDM6cya!_Qk%WCQT3ikE1jOtUw;MOTN}U-A%t@mXLpIbe0q+1xs1>>FcD-3 zUURWfamjK%FWl?b^wSFIGE%CdO2;hR?X=I5(Q(}i=qgLC&+it`wvRcDtaPN6tQ;&X z%=eei>@X&W{jN`y{q{Jc%i zA13>(Tj5`fsigPe8m@a}~lJm{1UFht|e=1C4b)omXV@#;3Px6w8; zynf(;^Ft|Jpv9R1kb#2VeG&MJiv#wxVgg*@<$X3>B2TZk!Jb~tw`wb=WsVeSat0+M zM4SZhb{V~SACeR#31aVl!FWqJL~z`F^%w)y(=s*)^(M44J>TcZ&IqDN?aNXQJ|=>f zieTNJMMCc`vrDHJ_xUa=D<|roq4I=A6X5{MmIgv=C!GZVdd0mKgF#rnX-)prh94$g zLbMR?RG*N9!=D4;G&Si%Zh?EKt%_%GJz&WTy&^M+4M5fpYuGAe8)du9FG_inZKze4 z#?fwmyu=Lz_!S1a$Sh&kul`<+P&;c+LL%9IIs;@LOzI_X4kxOq*oeWco*z`~=agAV zeIxsTMX0I0p!C9G7;K-rcTjHOA{!O|Vc3u_;X_NWuf^>@01oPci6fCx_6;)!RuClV zBphrQ#QrbTnl}{M_90tuLHLehjMRCLM>M#5h~ zUgzPe@ecPnas?8z_NJ!H355Y04N_j)htlp>R;umL;+TE?h&VY?GxN64k67oEk4oEd zfcx-^SIXbMh(4YH5{1_sbvrF^y67pGMl1Y$l_j_KJcHEtUN`N3Vo8dHpVGf^#ZH>5 z%+@olzPJAMnJlCCKKn6dr0$Y0G;j{G82HqE6Y9T`P&kFv(y($?Jwr zc#vqqv1p##(YQ=ro9ASM;I(Tx$WgVSM&PyjEcW)Z@YyRby4vE|<=kmD-!x0FCiON3 z=2!t$tiTT4$+JTjQuBLvyJ$zXvO6;$AAODjQ@zg4&hg9w*tIzkfO?mlN0?{vus)7` zlu$#-ZpKx+h~9O+bxV(kVoLN@OgpWvN$13V)`y9_>Ln_GY$uuq=1fWt>!q+sZ6U9v zXJeB<>+f^h=Go<)$X$%!4_VtI&{=TVfC7~ERoIDGLQ^nd4)U%LH?f>{0& z1+{i`^HBc&tleA_{Z2rWd<>4X`YjQ^fAbeo^7{)+<#6OAZY?d17-&?|!DidrO>(Z+ zI7c=Y^x>}ioZjauZdIqM@;;PfRik`x&&bpU_Oc8$xBI~->UU|hK0p-~mfuLMk5!dq zRDlO|A?1~}GaV^M@(&+KmzVnC(9h!mL|gp8`#2ep2ReCpc?x*9!+B$KSY1MDOA79j z1J7Sf{kTf%L`-zu`0*B56NCTW6Zu3}wZwjUj}5DXf`Ynj#j2kp8OS){dUa)mBN-N; zwulLnpBk0=s%>IDMgWj-auSM`@|P}G1pb1wHomwVj4rMJE|WE)5##5UBfsDa;b-0Y zsMSECp&E2QW7vbn$AHUkhg=8AQX52h%6Q2A8SuqLv0rlL@>Y*`t9oN$GR$aB%( zf56d51{a!nu+$oHc<6cXO6s>kV_8-C&mUsDqTMGa1dkMHhl^js*ikn88yyn%>@W>y z7NoZxL*#TjzDa#tQ2dU(GzKGW4rfjoIo=|@C>3VdHMs*ItY#JZas1TqNDSPd7jx~p z|9bl(6$UgoQ#z(Yo*|?4gabR3>-XKh;H6pZ=Kg*w87XNKvfqai9{lH^|9e1RI>DOo zloVQzDK=tGNPH2)7pZ;7ZRy02g#jL$+WQxaA?cvyFjZ7?rfa|GYk#DpJy9Pnc?txU zd}mj`!IXPOl1Ro{GAG3$9%l;xX3o2*V!d~d!3`lLH&Kh){x)n65~joPL#tj)3_y%o1y~)}{WBy9M z;~1n7Bf=k$BtF%PaCJ*H0dq?`lI5tedZgB4ug7?7S5T@LlLQv%Zb-Vm`}(i(4D;dJ zDc*n8U)hp=W2%J~dl_vW`)hZMVPq0?SJv6Qv8oNY_L?aa#gG2Nrp{Gog}E`bPclF? z^N)fgm;r~qW@B6J(?!JJ|r}OAMO~r_)=-ke%AXv zuha~4D$=_)AYSnKT$t^-LL=Dw=i)2%Z_bD>=^9j#u8EEJm(wfBIZ#SId39tQD5flT zR3zqIlLuJ!0}QRm{Md63Yx)UQ>)V7DEo0XjO&GokNe2~^G0E{6NI0YH~9PGeBR(Aj_kYSsNZI^Gtz3w6T z7nCpFMm8tCyu|jTufeh9XYtH$^pc}@^2pi7H5C)8CLY5 zpsH%nF>nLOiDoRV;``MBt$3fLbL_v0^8OyOR?{vXRo_`El-tsku^*mWa1ZPUYP8ti zsO0G4ehb-lKds)-hbbF0l89x0Qkt1r`$dF-?j8^{$!sTz93c$GE+k&=MFH^cGH2`E zwtQc!csT(m9b@NVlh5n%Bx<&o9H~DHWPVz=FY9i-e+g_iE-&2i<-N9=l6$6akrg)6VAJF&_v^nCis*Zvf(CREp3ZXC8LGFL6#;_mVfa`3dY zS)$$(zPW>1-6lO#DuZAs<^BD(9{>L$Gg0F3QTIrF?LT6Sh&BmF_Nrf?ka7hhNH3=z zF6sOnT7j$`K2{n@SZ~jo8!>4-ZLkvlCLPiqM1 zf|+mZFPR}2C&{aFT1nt9iT^}2(voon_zcOX0opF4;Mr<$Ew^fld{;$kgm*Wx)ZLVAyz}nDTHWOZmJ(EFt@OOSz78`jLa6mI6d(!D+w_E zjGos!n>F1U^e6yi9od~hhHvEbivvO-_onw2`y1IaRhenSjIh9aj}?p4N+diZAyuV0 zBQoiWk#;b3&KBl<>67aL-uv!CW4=Z7nP#f$+}ZQ1E?J#pOlm&Ifw#J?o)e>p9!)5o zfL%~3`*e%^ll`)dXI27pMpUp8 zgP_I2gnVQ)hm#pu9k!o@x%aknOp2wr|CBc0X_OOsQGY6OGcbS=(Elwn5KfIY99E*@ z+&&2=YUel}7Hv-cu=1-s7E+RyvbooAX18^$fVL|iFN9o}xIoCjqltPX3t|Jd5XZES zIg!33JJyW{Kf*~J9vXUUd6frCa8>V3D6K4_&8@7d;N}J&UB7-98I;d_K*sSsyC}PL z;G5LWiQ#ejjL31$ZV3&oXjwVF_G?NW$0oM$@~%1z*RfntP#TcRcbD62S}a$4!d!fo zY2Us zAF0UITF?GneCzdhaG=IW$l!GYJeZu&yVC|gq8{{c172S*n=v!pD7#Ir6`?@@wR!gq zI~(e&n^Dze4PS--BK|a8s&Be^97zZli>^apVLmL*v*SL>{X*M`=6=|v!yYl~HGc|L zuJ+Z;r4%IT2y2JnI^8|%nLm>Pu1(KzKxrTSK4CwYYWq(`%l7LZg44r0Hv3{zP=)%A zKJ&-BF4Ui%O{#d2#6LOl#Z)nbuF{L`WiYCRGw&AhjT%{yJ{=qU*mJiR(mmkD870g0 zDDw+boP(da)P^TY3te`P+vkd_WTqlqyN0N!BExcmv;(5OymkX$o#&yL4K=?joYzGb zS{$5%>*{NEjz@C>Z*&>vo5+!pbKgJ!F*@;XiH%s=PCcJyX&=MoTEFhws8op8MqZnd zvL2xANxaYg{mpTrQ)lM5$kvx%jPHYZp8PZK2K_GZdRr??of&JMD;nI~ydBAUF2XSR zU>H7Xe&+urz%?(rS5clH?B2cjYZa0^I%~~vSs#z&43Kw7AD?pq-?GllGAvnDmj>GG zrTIUtAxic7A>C3vYXj>0%7k+Nyi3znLD>8L2J<F0Q+SJBa@x@j-r08f zZqT!nE4*9c?U`+5H&?ZDpqIk`)7=$ly(ZCiN_goM3_3;&ng zaE-72Ik_G#CbC%yl5VMRQalbk-8dgIX)af6^7vV_63Q@em~S2=Q(7#La>*M384d@xoYw|rRBu8-p1@zIzoGT#tuaZ`Fbl_k*YQ4-;eFCz{ z(d&hBT7uv{S@QFHPIvP86CUC8+1|^sI_#BrJSxw7soUR2S55xjv|L5e9fB;iLe+jN?Up#hmXL~w++NkM!ea$GSQM}8-}mjFp#gV z385U-osBg{NLUPt$m*``rosK&ZL3L3lr#D&zdus+dv})b(rBJ==RoqccT_ul^hrKr z@G3a~n;8h#&cw)w&?2B`13{de3PxVuf5&tj#_i^LZMTEwiLRZ8UrF_uZmX%J@z zM2b`2ygQ-u=JLEnN!Gg3prFqrTm%vHEiE17?Ia3PY;G)fQB5fAzofA%@c#l1W-KWO z2X_W#)yKQMyQe3Tt{CjOQ5EJZ_89Lpmi=n|-u>;1g_u0~TRUT?fVW1-)CCv&KxQ^pLIiY0s#-VgNs}TA5&OVWkC?po+F;x=p#@d$ zD&yLgvU^D9H|@;Q3kI*0dE=uw7k1}3f%p#NBZEjT!e2YaM=zS!e(@oYeVvSFp$WXp zQXuu@JeGGX=XenceNoKi#^BIS^vByI)$?D=src{ci5Q--*9kk=%cP+|obA$eo%&|o z-4G7F-)X@FT*tBHVTfW|JhoSp7bhVMN@6eDv)}@ylI2Ufx<`22;tRpfUZRR~GnPAV zpsa3e8_q&c?8B$b$$i6>IwPsE$UZ`_0WzB4Y3o))9f~%@^U!Nn9=Udx5l8Whobkek zUzN`MZw-`>V{D4Y5_u+eR2hWi{fDdFXP@+lVgnLY@LjK}9CYIIC!{9PEucP;(T6H` z1ZI(OrF}}!jdMrI(_$5Q$JL0#WbBjtN{rsyvW)v>jeAl%0tHL?UAEd)SLqt$nkFsYY%}$el z)fw?(`411d0URZ4NG9%0BV)*LDrizum@x~VwIb7Svq@TV{>mO-<>9wW`c#wp`7c%7 z9ehtZO~K>l*UC)WipTe3y>gc3Cr$>`+Unh{d)2Xbt%E2sC||t9UPN^~kb%4B3_WDW zx;t5&60KW~t=VI;(0TV^GHii$N39w^0aSdm=6LWy;2Nrb)Ma&dJC@#$$KaOETdmsU ze6uF5pd}!3-l02{v?SP+H?)@GJk;h*J{#8X#8UIP^4CkThlh#6rY_Dgr0JUk`krKM zDrDJKlSV?!zM!UC;eli2X#tN^6b<4QvE0{yIkn}2^Q4k(j~gW z-cImj-G=MEw~^bn4l*gpao|KjRa$duJ=W$Qq;C=36 zJ{ZIBhjB%pL@t;-eyq=|GM-9{wCeAc&NeB?<67(R_L=lur($l)Sqwlqd*&}X8oyon z(v+SG-RpI{(<;*s{+vA`cNVVg=~%ccS-Kytu+JDNBmHjOEEe7S-$wc@=8%nc6xYE4 z9;l`z(CNwCKpKd%?Vql@$=E1ePN6+|auULh`|KuKSey3NpI}B=iY^N~7RIUAHNj!T z7nM4+HaE1k$XtEk5FTR%$nY2VKJ$D) z@1<5|J#t&9sV+U;vn#2V;W@?sYM#tNae7umO`>zSEFS1t=do;a4m-%1=L#U z*%#x`A9rUHoOvK-$tKKn!V=$ng?g@s?@Ju!J+2;P^y2LH>Eo&Viwh|V={v1_+4gE3 zjrt2zJalRepW_ds?A%-$K^tgrOF>!FcWJt_44{W zf?bh-0IfcPPqI;twyD6ob*^2kX7vUgk7XWIer;1ZuR!Gx* zLV-VHhtztEE`{PnmlKAuFt4d&2kg0O@eJ~-BswzlCmx+uwXH1&mrMiWvnRFxP z!r1V730#=mwwCUZ){5g_*5i8=aT}khw%XYEyz(3;MIZud6^?l1Nc~zBMaz2NY8;*U zg1l($9V*DTyeqgzO4SP>Q;#DJ26*_OM;IKl{?rz?ir|7d2E0Kh(!En_~a*IHHf zeZA5^{HFVLs^XBErdrY3%yPeIDspFK6!z*x-Lq+m7#aIDW&1dpcdK7nainW}UDmeK zS~Fa`Cd%}=4@eD;SP8%>JAM{#ik|lUY4Cq&{_Ov^#YO(V%Fa42s&8xfg9wO}v>>5? zfS@2qNh%=?(mAA3L#H&NbSX%~fFNDc4k;ia-3;AbLk%%7Gw=o@f4@yDMBo4S#v_U&VyRDqyqB%!MEtO z%wy9#Qn~^?Mc+BKSIt`Nq{eDvviixH_|xkr28YPAsL9B zisuKCP4@&AlROg5#+f&M50>|rkt>g_u@OuH;x|84X<|+RgIy0v#G7)t@wk=)rZuES zh5gf;mSVMyC&_17GU>q8BgH%4na7MI$f3Y!ngrO}VdX z9rT!;rCO6QWAIB%BM*f6;8aFM`+{k7mGO&$(D&Kc_!47gm@*sA7Jc4X{7}l8m7h=7 zqf5^iWq-?N*PN4!%|??R!;uMi;$<8}qpWn_)ppVoxpeAga8}^5iS^2)b>n;2Til7` zw(-OyP=uv_la9{If2#%krM^|(qPPdi(H@2T98BuQ;K2j$4Y7AG)U0~#LKDS=wpgDo zZ>M{F%tz^?OArLFSI_uympr*=5>~S-m@m(|=Mp{218Qn=xjI1>p1&y?YBA|`3iE=n z+&nO5A!M2wzSx~h`6f_wLsc&4WfSswW|Bhrji2%?!mkwTv-`67{sWfFuQZI=y}(%Ea26S zQW-OZXA6QQm+#|8O)(26yxg{ZOU68wS72u(P-=4<=~ax_V0)0){zY%9@z=79=3Fnb zM)h&*5NDqOCk+AgM^=397j{OPsN_PW4o`5nQr{n~o@Y=-$|$d`J6$4s{C)pJo)7{6 zQBd3p4h z>N%lr=W?DXTSpq1HN(ER0m=X?j=(-Ka9>rEeg)M`I$TKHYr|W^KRMQ@Jb%^A{~x?8 zcVrH36+f9S*H&tre?HU9MU$o38g9U9;;vJBx9UaZq?8E%Bl+?_k#kRIm^llz=1~a} z%=>#`5V0jhAPL8>U88TW&+z!?r7Fo3q5gD zV=I;9)?l9tc$~ZN1qh)rxX$H)8+0$^;(M8?B+6dzLa7<(Dvydd2(M1UqsIEy3kz3F zE-zM5u32$DOVog{-(GT`XjSS>T@#W+PttgX4DOkehZQt#iWTzLmz+9J>b)CCYmDwV zgAt%HYDi25+ppJaCw}zn?GwcCtu!%CSP$|ckRpRKW~654duC$mf?fcV)dFtN)nUj7 zS{4h_ytN)WkWGa|tj07Rsfl&acqi}ULK2X0;(2lNdW-h}>Z(1+NjV8E02JlorX@3- zJ!6NL2Q&`niq5#TWEKQEaxKk24ix2Ouwt#{0OpPtL;2rxhfE^mOd(0;e(1^Z6FNhK zFPvg1Dl`%8+M`9o6tWrA+E=(|V#Sx8%mVPg(Wu;oY2l+}Gf5eLrB2rSt%JQrfmItF z&1h!_4nve_hoIRFqvs2*i5SEU26V?Ij9~NZZ$ZN6&azC4E;Da;WD(2kMSAj3?g@}N zWNBqvwtd|_(5|TrT5zL7rgt5$+@ak_PbfxXHrUL*EsBV48`uFdLq&|e?M|z4 zynh3%$1jkbl_-4w{Og+~%j`Im-0I7*^zwl)5A@Lxq*3$Hn$HG=_J6~am$H8`W%toU zR_TSYDd*C3z>hjg3PRMTL+y4ic_~=B_$ql;kSE=J8f)b6{`Hu>CX!AFLQ>S^oMbi zszcMz_Aj6&R+FA*wO`ENY#r9eg_P{v8yY+t9oDx@?xOwqeo_VRO%dOQ9&_oeTTP-U z^8~V2reaSi@2_D8InduZ9)C2iM3{8r%l*3EfLSn{mIF8kms>%zB8V z`1P!BU%;l}i<<33$UpKXPDrK+JpQw9ya$BZ{-rIjvmYb_3yk+DG--O40_Z!7=3sl) z@FCdj9T_PPpiF~F$_;1Ah|pEqP!JT)vI(%HRfB>m7X&7oJORJvc*7IX!0s2*O1=!a zHAIWmbPLV5MC-QfUGv*>?4H1BOi#Cf`i!LSD)Bao2lrECUAY5YOJsvt>eK!+{lXemXy>(;V6N&h@R)}rB?+5Y5XcQgDxmJPF z4k}fBD)+BS2@Y)k6ba&dI_3U4rh4kvr8~FCwbpJWbwtJqT+K!}UQ)p7@@>+0$ zO9C;i&0=Ix#r9YbMxrz_mXq^{E6K?5B1u*$H8$-VEKlDtFTN$89i~m+S=hlA)yvIW zn3|N9cF(Tx$D4Nb_?pM6?O+@doK8ILH{_wI$CsA+_^EU+CP)_s$8|Pl2cMsz`}FnB zJOCWTaYhLLL5+=l2`?-!^oQGqZ!#$5>sZX@XL4?t`q%;A zF9*jK6=`V?fY*<6)z%ao66xR`>_16Bp5kYdB1f5#9!Um5SP$|j@SJVZ0M623UooC@jtrYd%*+X z_eW;xGC==m{)Ap%{FWViDiEwxsN?gf?RM6@ANib5!LPez z*QyG-ks^JF*NYS9&khY>Bx$G6NeFl-YEXAV+~a2AYvi87+cAkX`aSofXcOl0*Hl0? zu`3oOd}J6Y_pIv`ODJu~2ddlmq*{yC(&{Q3KtVNbOC^C~v~D|XxG^yQW1;2@(|Zfm zU`x=`bdM3+x*gkZEynY9va;Gj7MVA*dM*}!AK9FNKKoqCzn7RUc$9t7l3X0KkxJQ?VHXMkm%jf|?-lr=D>)kCg*=NLnju3VnlFnm#?h-- zUsY`9WgOeLyb{6b*7JgOK8FU~kZK-a$a*4$){ij~R zm3P@wsP}yJLL@sQwXpQWKo2JF zFc^VF&UL6ln-W_m*p_y8;d*}_`#H?`3A3_QaK6u`u*jMBB>ZCV#BTqzWItKV#SQ&2 z3h}GLb$@E00h$UctsULO%cZ~pRlb+{QFBoL{lIDIr~|un1u)BKK>}_44 zc~tHGJZ=2#IQWy`VTVoLa6S=c%VS>ehOLXcWso;e(MaC|C+sS%DNnnC9s>#YtOQ*| z?0zB)-)4uz@99a5b=sfDeK&i3VxNe`+~xQ78g}-TnqA>dCMVZPO>-rHwo$-!W8TwGS#~uWx~r?|3U!=jjmt8%0?=ALx2pUP_>4H>RC(5!ZYM-kNW{ zzLo)QGRY?*J!*R?lf^A~Q~J+oRNVM>7j1pWt@Z)!(JV*`nN=qkRxmKSE)lLiyItKJ z5+L*eu1q}8_3Mgcoll6_vMU{GZF#?cs9xiAM}oHIdcN9~1Zp7k@K~OA z3(?5EI=c{&YWKnV+l?6R*Pp_}RX!`IyKVV)Ua~H13fuJUVnZ;g@kQNAB6Y5%oRM1o zi*GmQZ}=T(4bMBA3ye6#oVDfWoGYF;mCx{h=D6G*qmgW8RgTX0$18#4a7J1*QMd4) zW0#E%ymh6<%PHjl_r%YKg-F5;mWvuDWQ``N=Z*e zm?@8iQ@SSoq8XihpfT^YWsW)3)mg3ZkfwJyfb`$LNlr+Wgx^`v(fz525%Zrso5|KF zzQCnBRN`}pEJf^_Q|Ur z9@XF-PRyAzgzBEB_qxTx_mCC z*rolGR8+H@skx=+ED3#sN93Qqun6;Ngsp z!>5Tl;609ySo)q)q3!jUT=?_Gk-%GS)fu?o3_+laLtWy0(5}Mh?0lsNpGf@{FCKP> zq59NqhL4ZWK}^ihfRW|L2na;gttk6a`}U8=g`ztJT&Wl%`KEUoDtkw(3QlGm2LYIQ zwHGEm1l7j}UhrBwIz7uo#(L!J@RJ7TA>!A#Ne|Vyo->ag^YY?)s1A${GR-YNZMIOh z8?uQ|9mvowo%{k3tJUb#OtpC8=Ilw=z@p7Za;rZMtn-s6e_M%yeB6b?l(os~^-NHr z$=7-(DH=foI_o+no~d%G>aR|$8_ntJ5DtD*5TDinFLOw z5zgcYId-afN2&Z(g4^4T{YRVMr`(ykp18q(WvOaFWL0BzeaSX+q_*+<6cl@(c~(J> z1{P}KJyZv)$KyP0(F3~QIfr^WwwJuRO;U9+s!?ROfLij@hWxv&j-7`@$&L$wDI9jL z%$=sh*t;ZFRI#tl8W&bymqe~|u&_|Fxn};pTg~J$oPycfr)B>(H$LsoJhQRr%N|$1 z>*i*<>N^VehAIz2X8jhaE)Z|~R}RMead>C;B~#A^xI-$LEFV_{9@np(?}vQ0T(N2h z@l2We86%F_P4xh`MPrGfT?&oBcbrTJx6mYkk8Xy`4_#5kocfuzW@+!}6c zKs<~p|AvH5=k(?PEc}bL{=p8P-l?-D_pTikd&hIu#iTAF9;qe(QQ&PaYsjysv(;cy&{yoW!jx@3!J5KHHU1X`> z4_;T+TsH|({914*fVOkp%&Hd9y#@U zT(9@|*hlnE#GuXqu>&@cndY$Nd;wA(8M{Fy4*)9qnL-eyKe!nLa!*Uh+f0;xW~Wa@xPDX>jGc;mk$*h9lNFNOz*Wl z%;B<=`*BOC<*FNKu9(j+$*AXM;(ab8)^Ejx!sMN4f?x@kp~2qmd&e=>ozM14?h6B5 zR>XEVb8DR4fW5TWMnukUtSaC7$XyNgN-R@67e2&E<%n7d2q1s>0VNYg?f5)^yd$dp z&eKy2m!%`6 zm+~P7N-Db<3BK$9!E8w@T^xy#B2ITimFqW+61-T@Sl6o)=l5@l5XV;)FT+^vek?~m?k^LKW~$W< zw3(TqY!LiT(YI^j9P#lS#v^hu*`Z2ljr`Kx_c&t~|0Ans29KoVt7`MHl-P;&BxFOA zu+?6|+o0PEHZ{=A`}@%ZpkD;xq%BF*stSOTcs@BwMal1GSs*5MgEVfRdhDCY&tpq$ z56|6hx&UQ;I5}v@CDR%5F1C9mW`l2+V{tC0*@9LJpUOcLwAE1NA0*%A@c1S2wzCRt z++)w9NseM-T+gHR~osvwk&Tk=m?aKqIeL@iP$Ujd6^Q z=j?==e7z0mPM4f?v^F7vmO(^Kw$SYAouvya{*49P(W5hIrOb6_{XV^7v83=;oZTDZ z(W{5m^7SGr6^k7cF-eoFeTtots<1k(d(_Mg#X(?|&MH9VNIWztc=X$)cUJJwT5F76 zBO!Nu9=BnYY}Ra=#k%8qLg4uWA-$4rSd%4ujAOtKnF}^-tzJ79C5Eh-BM%zi zRH$%c^E(N0F6W$F3w1({uRkS5)F<;5wv7c8vg4Tx-fInaJyU9czMU@xM?H86O?N*W z%;8fl@(O6ReeEAwpF}TqJu|`S4hcj80)N-lOKN9iR%; zhM=RQbL5p5xM}I&W1?^9nSl_h+*_<3n(R_J>1yeY?RZ`U`7Y$^`I6h{oQr-gw2h-d z+0_TWjDbH|XX>n=w7p^4Jf#|_Aqc1&kL62SyRW&yc14Ba#?(dQEke3q&6nwLoyJSD zovqE!|IC)+84IY$$_jpvP<0sgLFg^CN?z3Blf`0ZD+kL&T$*H52LU16%=#8P?^_%a zTZ`V=tBuKZbI5W+P>}KFuwbTtuAff>t{-q8 zeZXHqLY|BWkC{31IqMC{HPl|#djUvDnBs3Y6!ay`+#G~vl%=+XDOxc zaZoziS4)6JETW$CKI|Lq%+1NUZA4=^gR*MAvAE<4I!DNWD*E`raQ%S{GcPQfwv>iZ zglhAhpv9WVTc3vkxPVIVNOku~+hZp4EB~A~{_GjfqIovY4|}=WL9i%-I$JZx2N3w6 zTkq&Y;bU8(`&*O!{m+1<2C9EJ z1#mb8!g|9N2XxqQJ_riJq2@KK{zaNQ60D^q2l9+^P%47-DT01}%MsHm;Fc5wx<2@g zPui5}ZY&PF!}Hxk6(7?Jn-_5NY+mO(w+KRYYNU@r5EW(92C5+B@_OF5V7}NLJo|`9 zpZuI-z%-I$!RCs1Lh8at-cQsq8`8j8r>U{S!(~V`)t{Y zlhkXq=`YgjjgA6$C~*LTRcHVhklvqex}+?8{aJQsy{h(jWoK9HRZURH zU!QorM0J)`R5ldtZ#U}Wx;P;)_;I{+@cnHB@T>!|d!Njo1~1H|34IQI;CGco(JUL4-o-PUai|*4; zRemGC)najUt)l4b^mq3CA1F%2wS6SCwr*{awpxPBtT)m<@XlK!_z#QF{ft_vt9~Bk zo%G9Tsn!mx^vjcV6d~&+Hjv zP6uxz3}E9hI zL&@Tc*6s9EVVhM^Zv_nfM0XdHW12`wfr^#Y(yGvXhRPN9!<83VM|}(WOqL!v;<1_Q zC;h`eVfWGXBa0lER;ZhTGs(IfPMLLQZ?>Rg($6QWq6=*-ncYpAN9f z+-Noy7L@f0{SpTW=d?R$#KY*pGhrX*8FJ@&#PrU1&$=+up zLa$@@`pifl`HqYC_d@rZcmKAm1i|*1D{#7k+TKE2E5(0r-}wGtj4T)3zrC)_Adcrv zRmD=>FDc!riNx5Px*=DUr54>vK>Y+_ZJ@6Er{m3m&XT~#V5Zq2r#eWR^R1_)@!S;T z8mgA+T0)*onEi&N`zv;(RV#H+u?9I>(li{q7g(i^l-jJB*oX+*nW^C(&7W^yj!(Ix zhJRX+V;)XN{liS+a#bJu?l321IV1R^TR7;d)M`E7M=OVGet36Nj+4M)DP9YL)2d*ZC}^~>=xhfK1sS@CI4V|^n6{bQ_%&S*zVr<5$==I zy{;T~?v=iYj*Gpn(3Y5tGe=1zr!uP*`$H$aeVd{vG5_x^=yFeHG;*glgFz$xvpYon z=e{oc(Y;>FQl21PP#;Iex${u_PZ(imbuDU`r)*(LQ%c*`&|6>Pif4*@w5Qef5a;Ec zn_s1sL(%Xuk$|O%pI%m z{lA$A@QPw%(zj@)4Lqf0exI%lqsy10%eJnpB$jjd(4%v_DhiDywOf*PgKYqJCiy$= zNBKFSL{kx*MGI<3NJ1fu#BDSIY89c_+F;t4{*@BjC$z(B|tT;@{f? zyT=uOOg{**vx#eV6r1-Z?S-iwa=lB4VLup8pBsSDE6K~sV&4RF9)TOQ9f4J(Wa#Ok z3U!mxxjW?RWhP-)l~6CYlyJ~L2`sUZGZh$RCSUqu@V`tCU$~8c1xx*(jtRkb;OxKq zZ?v`4SyK#zoHqqtc-Q;%05qim)^dP+6pUNej)97?MHZCgFp;3RuzHIaZR2zCNEV_J}#)G@C|vxm`#zTyKx<$58_khnGxAlEl<2-weSJS>^m5s10@K$8kwT*h?$F1qpQ(ObdUajYza@&}tatPHvQsgf!#`0H~8#~c1~#1uw4 w`x60e{-3>A{{qhc>cR>7e{g^Oe>{jKTR@pj(QSA)fq+9%PEEF4+AR2g0kxjTuK)l5 literal 0 HcmV?d00001 diff --git a/docs/content/img/ex-stlc/dataform-table.png b/docs/content/img/ex-stlc/dataform-table.png new file mode 100644 index 0000000000000000000000000000000000000000..3494b044e41de70f4f28af0c9a929550b1fb535f GIT binary patch literal 17440 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 literal 0 HcmV?d00001 diff --git a/docs/content/img/ex-stlc/genHelper.png b/docs/content/img/ex-stlc/genHelper.png new file mode 100644 index 0000000000000000000000000000000000000000..174b61a78d912dc194c51a7e4694fa04e1fcb69b GIT binary patch literal 10643 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 literal 0 HcmV?d00001 diff --git a/docs/content/img/ex-stlc/genHelper_forall.png b/docs/content/img/ex-stlc/genHelper_forall.png new file mode 100644 index 0000000000000000000000000000000000000000..ae46cb1ecf223397eda35f1d999e9ce0bb91fd32 GIT binary patch literal 17461 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 Yri?$Wohx~L@drRcRQ6k$@Q+{r7Z%QOga7~l literal 0 HcmV?d00001 diff --git a/docs/content/img/ex-stlc/genHelper_noForall.png b/docs/content/img/ex-stlc/genHelper_noForall.png new file mode 100644 index 0000000000000000000000000000000000000000..de28f06af4fd9454a5669f0e1c854ae60254faf1 GIT binary patch literal 10456 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 VepKdSh^~F^>QM literal 0 HcmV?d00001 diff --git a/docs/content/img/ex-stlc/genTypeVars.png b/docs/content/img/ex-stlc/genTypeVars.png new file mode 100644 index 0000000000000000000000000000000000000000..019983bcaebc871796058c1e6a139468faf10095 GIT binary patch literal 50023 zcmc$lWmp`+m+l9G1t(~NyL*t}5Zs;M?(PhpV8PurxD(tN+}$05``|XnC4bqydw2Kq zoiAs)p6;&c)2C{F=dDwrit-XDh@TJv004@Vq^L3g0NnxrKs6yizqL?;W)|PfJ7*Co zRRjctl|KrbZ-*aU#J;(x*qgby8#o_Y zBjaSvT?ccY82)?$BZ($=3y1nljcX34{Acb~cZI8UMa7(z?QvC(oV?g^aoPNodWE(l z{T2YD*eiTXM5j21WSGii6&x*u*W5}mi16qG@~$6pR><0ic!Q((nq|)LqPB$)NCVNy zM$4Ptkp!ZP{4B{kgnnxfxz73jY+0Dk0FqR}hTKu~XEb5NBQ=10WlKkRWtPu9Q}+gN zL1^wef#{?zE?ugVI)4Hv5~T$P-Dl8T|29(Y9YFW6v;@IIa3GjH6ppJcCqIUejYk}1 z5Pye5E5Ve|hzC7WU4JKRCkc$nRWd3>T5jy==CuHMd>+mJR>VK}cHHGX;H|=cg$?~|ckbW!>Gy^iCodXN*yzNCLZh#sd;{xsv*sA8{tM1;vtn1XugE>C zDZBo$>44zzd7S z*%C!`%#_RNUWe`!5m1eb`k)``alt8OYNt{ELY>|0ZmFftXSIIYcU7XzBuX=WH_T3& z--O-gj;joEz31^g3f;FXQ3?^)x6fhJkSx1vpFhq{ufn#suPlGnzFM!U54R$Iad~Lg zu)I9jBqn-Y_NefHs63sDWSp4`052bGAtVdsVv&_T&99a@BhbmTbvQslv4_Wdl zE!0<`;Lk40@f_)oCk7~BOy*tMi6}W9_R%h8b8rQ-tG3Uf+VV=L9sG*5^kc(A^$BxG zkMWG^5cBxcmqn|Pc#kK7feRu=mIlIK9)bPzaelD|nAvN{0!@}nPjf5LSzh_21-j_- zzN=^(uBt@?YhUWVs^s!DoJ`j5pFbT^EAWBb4(^PlFADn$dxHh%4ht<&lHO+_h$6UgSGy;?twhcGsFKszfV4p#&kHRSu4&Hx3Y`R7-VVQM