lol-typing-1.20160822: lol-typing.cabal
author: Julien Moutinho <julm+lol@autogeree.net>
-- bug-reports: http://bug.autogeree.net/lol
build-type: Custom
cabal-version: >= 1.24
category: Language
-- data-dir: .
-- data-files:
description:
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
<https://hackage.haskell.org/package/Top Top>,
using my own code conventions and ideals of simplicity.
The most notable change being the use of Roman Cheplyaka's
<https://hackage.haskell.org/package/monad-classes 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:
<http://www.open.ou.nl/bhr/TopQuality.pdf Top Quality Type Error Messages>.
.
The <https://hackage.haskell.org/package/uuagc 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/
<https://hackage.haskell.org/package/lol-calculus lol-calculus> expression
.
See also: the <https://hackage.haskell.org/package/helium helium> compiler.
extra-source-files:
stack.yaml,
uuagc_options,
Language/LOL/Typing/Collect/Grammar.ag,
Language/LOL/Typing/Expr/Calculus.ag,
Language/LOL/Typing/Expr/Grammar.ag
extra-tmp-files:
homepage: http://pad.autogeree.net/informatique/lol/
license: GPL-3
license-file: COPYING
maintainer: Julien Moutinho <julm+lol@autogeree.net>
name: lol-typing
stability: experimental
synopsis: Type inferencer for LOL (λω language)
tested-with: GHC==7.10.3
version: 1.20160822
source-repository head
location: git://git.autogeree.net/lol
type: git
Flag dev
Default: False
Description: Turn on development settings.
Manual: True
Flag dump
Default: False
Description: Dump some intermediate files.
Manual: True
Flag exe
Default: False
Description: Turn on executables.
Manual: True
Flag prof
Default: False
Description: Turn on profiling settings.
Manual: True
Flag threaded
Default: True
Description: Enable threads.
Manual: True
Custom-Setup
setup-depends:
base >= 4.6 && < 5
, Cabal >= 1.24
, uuagc >= 0.9
, uuagc-cabal >= 1.0.6.0
Library
default-extensions: NoImplicitPrelude
default-language: Haskell2010
ghc-options: -Wall -fno-warn-tabs
if flag(dev)
cpp-options: -DDEVELOPMENT
ghc-options:
if flag(dump)
ghc-options: -ddump-simpl -ddump-stg -ddump-to-file
if flag(prof)
cpp-options: -DPROFILING
ghc-options: -fprof-auto
exposed-modules:
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
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
Language.LOL.Typing.Lib.Data.Default
Language.LOL.Typing.Lib.Data.Empty
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
build-depends:
base >= 4.6 && < 5
, containers >= 0.5 && < 0.6
, ghc-prim
, lol-calculus
, monad-classes >= 0.3.1.1
-- , monad-control
, parsec >= 3.1.2 && < 4
-- , peano
-- , reflection
, text
, text-format
, transformers >= 0.4 && < 0.5
-- , transformers-base
, uuagc >= 0.9
, uuagc-cabal >= 1.0.6.0
test-suite lol-typing-test
type: exitcode-stdio-1.0
default-extensions: NoImplicitPrelude
default-language: Haskell2010
ghc-options: -Wall -fno-warn-tabs
-main-is Test
hs-source-dirs: Language/LOL/Typing
main-is: Test.hs
other-modules:
Expr.Test
Solver.Test
Type.Test
if flag(threaded)
ghc-options: -threaded -rtsopts -with-rtsopts=-N
if flag(dev)
cpp-options: -DDEVELOPMENT
ghc-options:
if flag(prof)
cpp-options: -DPROFILING
ghc-options: -fprof-auto
build-depends:
base >= 4.6 && < 5
, containers >= 0.5 && < 0.6
, directory
, filepath
, ghc-prim
, lol-calculus
, lol-typing
, monad-classes >= 0.3.1.1
, tasty >= 0.11
, tasty-hunit
, text
, text-format
, transformers >= 0.4 && < 0.5