Skip to content
  • Krzysztof Gogolewski's avatar
    Linear types (#15981) · 40fa237e
    Krzysztof Gogolewski authored and Ben Gamari's avatar Ben Gamari committed
    This is the first step towards implementation of the linear types proposal
    (https://github.com/ghc-proposals/ghc-proposals/pull/111).
    
    It features
    
    * A language extension -XLinearTypes
    * Syntax for linear functions in the surface language
    * Linearity checking in Core Lint, enabled with -dlinear-core-lint
    * Core-to-core passes are mostly compatible with linearity
    * Fields in a data type can be linear or unrestricted; linear fields
      have multiplicity-polymorphic constructors.
      If -XLinearTypes is disabled, the GADT syntax defaults to linear fields
    
    The following items are not yet supported:
    
    * a # m -> b syntax (only prefix FUN is supported for now)
    * Full multiplicity inference (multiplicities are really only checked)
    * Decent linearity error messages
    * Linear let, where, and case expressions in the surface language
      (each of these currently introduce the unrestricted variant)
    * Multiplicity-parametric fields
    * Syntax for annotating lambda-bound or let-bound with a multiplicity
    * Syntax for non-linear/multiple-field-multiplicity records
    * Linear projections for records with a single linear field
    * Linear pattern synonyms
    * Multiplicity coercions (test LinearPolyType)
    
    A high-level description can be found at
    https://ghc.haskell.org/trac/ghc/wiki/LinearTypes/Implementation
    Following the link above you will find a description of the changes made to Core.
    This commit has been authored by
    
    * Richard Eisenberg
    * Krzysztof Gogolewski
    * Matthew Pickering
    * Arnaud Spiwack
    
    With contributions from:
    
    * Mark Barbone
    * Alexander Vershilov
    
    Updates haddock submodule.
    40fa237e