lol-typing: Type inferencer for LOL (λω language)
WARNING: this is a research program written as I learn and explore type inferencing: please understand well by yourself whatever you may take from it; any question or contribution being welcome :-)
This package implements type inferencing
by manipulating type constraints
through 3 successive phases:
1. the Collect
phase collects them from some expression,
2. the Order
phase modifies the order in which they will be solved,
3. the Solver
phase solves them according to the logic
of some type inference rules.
So far, the principles within these phases
are mainly a rewrite of Bastiaan Heeren's
Top,
using my own code conventions and ideals of simplicity.
The most notable change being the use of Roman Cheplyaka's
monad-classes
(a little bit augmented):
to handle the Monad
stack building a Solver
(instead of a homegrown machinery I could not understand well).
At this point, only a bottom-up Collect
, a no-op Order
and a Greedy
Solver
are implemented, supporting:
monomorphic types (Monotype
),
parametric polymorphism (Polytype
),
type class polymorphism (Class
),
and type synonyms (Synotype
).
The quite understandable thesis of Bastiaan Heeren
explains a lot of this in details:
Top Quality Type Error Messages.
The Attribute Grammar System of Universiteit Utrecht
is used to demonstrate how to collect type constraints from an expression (Expr
),
and then how to transform this implicitely typed expression into an explicitely typed
lol-calculus expression
See also: the helium compiler.
Modules
- Language
- LOL
- Language.LOL.Typing
- Language.LOL.Typing.Collect
- Language.LOL.Typing.Collect.Constraint
- Language.LOL.Typing.Collect.Grammar
- Language.LOL.Typing.Constraint
- Language.LOL.Typing.Constraint.Either
- Language.LOL.Typing.Constraint.Extra
- Language.LOL.Typing.Constraint.Monotype
- Language.LOL.Typing.Constraint.Polytype
- Language.LOL.Typing.Expr
- Language.LOL.Typing.Expr.Calculus
- Language.LOL.Typing.Expr.Common
- Language.LOL.Typing.Expr.Grammar
- Language.LOL.Typing.Expr.Utils
- Language.LOL.Typing.Expr.Write
- Lib
- Control
- Monad
- Classes
- Language.LOL.Typing.Lib.Control.Monad.Classes.EffectsFix
- Language.LOL.Typing.Lib.Control.Monad.Classes.Instance
- Language.LOL.Typing.Lib.Control.Monad.Classes.StateFix
- Language.LOL.Typing.Lib.Control.Monad.Classes.StateInstance
- Classes
- Monad
- Data
- Language.LOL.Typing.Lib.Data.Default
- Language.LOL.Typing.Lib.Data.Empty
- Text
- Language.LOL.Typing.Lib.Data.Text.Buildable
- Control
- Language.LOL.Typing.Solver
- Language.LOL.Typing.Solver.Class
- Language.LOL.Typing.Solver.Common
- Language.LOL.Typing.Solver.Constraint
- Language.LOL.Typing.Solver.Greedy
- Language.LOL.Typing.Solver.Monad
- Language.LOL.Typing.Solver.Monotype
- Language.LOL.Typing.Solver.Polytype
- Language.LOL.Typing.Type
- Language.LOL.Typing.Type.Class
- Language.LOL.Typing.Type.Kind
- Language.LOL.Typing.Type.Monotype
- Language.LOL.Typing.Type.Polytype
- Language.LOL.Typing.Type.Qualification
- Language.LOL.Typing.Type.Quantification
- Language.LOL.Typing.Type.Substitution
- Language.LOL.Typing.Type.Synotype
- Language.LOL.Typing.Type.Unification
- Language.LOL.Typing.Collect
- Language.LOL.Typing
- LOL
Flags
Manual Flags
Name | Description | Default |
---|---|---|
dev | Turn on development settings. | Disabled |
dump | Dump some intermediate files. | Disabled |
exe | Turn on executables. | Disabled |
prof | Turn on profiling settings. | Disabled |
threaded | Enable threads. | Enabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- lol-typing-1.20160822.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)
Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
Versions [RSS] | 1.20160822 |
---|---|
Dependencies | base (>=4.6 && <5), containers (>=0.5 && <0.6), ghc-prim, lol-calculus, monad-classes (>=0.3.1.1), parsec (>=3.1.2 && <4), text, text-format, transformers (>=0.4 && <0.5), uuagc (>=0.9), uuagc-cabal (>=1.0.6.0) [details] |
License | GPL-3.0-only |
Author | Julien Moutinho <julm+lol@autogeree.net> |
Maintainer | Julien Moutinho <julm+lol@autogeree.net> |
Revised | Revision 1 made by julm at 2016-08-23T21:24:22Z |
Category | Language |
Source repo | head: git clone git://git.autogeree.net/lol |
Uploaded | by julm at 2016-08-23T05:16:58Z |
Distributions | |
Reverse Dependencies | 1 direct, 0 indirect [details] |
Downloads | 883 total (2 in the last 30 days) |
Rating | (no votes yet) [estimated by Bayesian average] |
Your Rating | |
Status | Docs not available [build log] All reported builds failed as of 2016-11-20 [all 1 reports] |