The lol-typing package

[ Tags: gpl, language, library ] [ Propose Tags ]

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.

Properties

Versions 1.20160822
Dependencies base (>=4.6 && <5), containers (==0.5.*), ghc-prim, lol-calculus, monad-classes (>=0.3.1.1), parsec (>=3.1.2 && <4), text, text-format, transformers (==0.4.*), uuagc (>=0.9), uuagc-cabal (>=1.0.6.0) [details]
License GPL-3
Author Julien Moutinho <julm+lol@autogeree.net>
Maintainer Julien Moutinho <julm+lol@autogeree.net>
Category Language
Source repository head: git clone git://git.autogeree.net/lol
Uploaded Tue Aug 23 05:16:58 UTC 2016 by julm
Updated Tue Aug 23 21:24:22 UTC 2016 by julm to revision 1   [What is this?]
Distributions NixOS:1.20160822
Downloads 129 total (55 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2016-11-20 [all 1 reports]
Hackage Matrix CI

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
          • Data
            • Language.LOL.Typing.Lib.Data.Default
            • Language.LOL.Typing.Lib.Data.Empty
            • Text
              • Language.LOL.Typing.Lib.Data.Text.Buildable
        • 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

Flags

NameDescriptionDefaultType
dev

Turn on development settings.

DisabledManual
dump

Dump some intermediate files.

DisabledManual
exe

Turn on executables.

DisabledManual
prof

Turn on profiling settings.

DisabledManual
threaded

Enable threads.

EnabledManual

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

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