Skip to content
  • Torsten Schmits's avatar
    Introduce ListTuplePuns extension · d91d00fc
    Torsten Schmits authored and Marge Bot's avatar Marge Bot committed
    This implements Proposal 0475, introducing the `ListTuplePuns` extension
    which is enabled by default.
    
    Disabling this extension makes it invalid to refer to list, tuple and
    sum type constructors by using built-in syntax like `[Int]`,
    `(Int, Int)`, `(# Int#, Int# #)` or `(# Int | Int #)`.
    Instead, this syntax exclusively denotes data constructors for use with
    `DataKinds`.
    The conventional way of referring to these data constructors by
    prefixing them with a single quote (`'(Int, Int)`) is now a parser
    error.
    
    Tuple declarations have been moved to `GHC.Tuple.Prim` and the `Solo`
    data constructor has been renamed to `MkSolo` (in a previous commit).
    Unboxed tuples and sums now have real source declarations in `GHC.Types`.
    Unit and solo types for tuples are now called `Unit`, `Unit#`, `Solo`
    and `Solo#`.
    Constraint tuples now have the unambiguous type constructors `CTuple<n>`
    as well as `CUnit` and `CSolo`, defined in `GHC.Classes` like before.
    
    A new parser construct has been added for the unboxed sum data
    constructor declarations.
    
    The type families `Tuple`, `Sum#` etc. that were intended to provide
    nicer syntax have been omitted from this change set due to inference
    problems, to be implemented at a later time.
    See the MR discussion for more info.
    
    Updates the submodule utils/haddock.
    Updates the cabal submodule due to new language extension.
    
        Metric Increase:
            haddock.base
    
        Metric Decrease:
            MultiLayerModulesTH_OneShot
            size_hello_artifact
    
    Proposal document: https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0475-tuple-syntax.rst
    
    Merge request: !8820
    
    Tracking ticket: #21294
    d91d00fc