1. 29 Nov, 2018 1 commit
    • mayac's avatar
      Fix #15828, from `More explicit foralls` · fe57a5ba
      mayac authored
      Fix a bug in commit 12eeb9 which permits the following:
      class C a where
        type T a b
      instance C (Maybe a) where
        type forall a b. T (Maybe a) b = b
      where instead, the user should write:
      instance C (Maybe a) where
        type forall b. T (Maybe a) b = b
      Update the users guide to discuss scoping of type variables in
      explicit foralls in type family instances.
      Test Plan: validate
      Reviewers: bgamari, goldfire, monoidal
      Reviewed By: goldfire
      Subscribers: monoidal, rwbarton, carter
      GHC Trac Issues: #15828
      Differential Revision: https://phabricator.haskell.org/D5283
  2. 17 Nov, 2018 2 commits
  3. 02 Nov, 2018 1 commit
  4. 29 Oct, 2018 2 commits
    • Ben Gamari's avatar
      users guide: Introduce :pragma: directive · e35ed9dc
      Ben Gamari authored
    • Tobias Dammers's avatar
      Finish fix for #14880. · 5e45ad10
      Tobias Dammers authored
      The real change that fixes the ticket is described in
      Note [Naughty quantification candidates] in TcMType.
      Fixing this required reworking candidateQTyVarsOfType, the function
      that extracts free variables as candidates for quantification.
      One consequence is that we now must be more careful when quantifying:
      any skolems around must be quantified manually, and quantifyTyVars
      will now only quantify over metavariables. This makes good sense,
      as skolems are generally user-written and are listed in the AST.
      As a bonus, we now have more control over the ordering of such
      Along the way, this commit fixes #15711 and refines the fix
      to #14552 (by accepted a program that was previously rejected,
      as we can now accept that program by zapping variables to Any).
      This commit also does a fair amount of rejiggering kind inference
      of datatypes. Notably, we now can skip the generalization step
      in kcTyClGroup for types with CUSKs, because we get the
      kind right the first time. This commit also...
  5. 27 Oct, 2018 1 commit
    • mayac's avatar
      More explicit foralls (GHC Proposal 0007) · 512eeb9b
      mayac authored
      Allow the user to explicitly bind type/kind variables in type and data
      family instances (including associated instances), closed type family
      equations, and RULES pragmas. Follows the specification of GHC
      Proposal 0007, also fixes #2600. Advised by Richard Eisenberg.
      This modifies the Template Haskell AST -- old code may break!
      Other Changes:
      - convert HsRule to a record
      - make rnHsSigWcType more general
      - add repMaybe to DsMeta
      Includes submodule update for Haddock.
      Test Plan: validate
      Reviewers: goldfire, bgamari, alanz
      Subscribers: simonpj, RyanGlScott, goldfire, rwbarton,
                   thomie, mpickering, carter
      GHC Trac Issues: #2600, #14268
      Differential Revision: https://phabricator.haskell.org/D4894
  6. 25 Oct, 2018 1 commit
  7. 04 Oct, 2018 1 commit
    • Alec Theriault's avatar
      Set `infixr -1 ->` · 251e3424
      Alec Theriault authored
      This simply makes explicit what is already the case. Due to special
      treatment in the parser, `->` has the lowest fixity. This patch propagates
      that information to:
        * GHCi, where `:info ->` now return the right fixity
        * TH, where `reifyFixity` returns the right fixity
        * the generated sources for `GHC.Prim`
      See #15235.
      Test Plan: make test
      Reviewers: bgamari, alanz, RyanGlScott
      Reviewed By: RyanGlScott
      Subscribers: int-index, RyanGlScott, rwbarton, mpickering, carter
      GHC Trac Issues: #15235
      Differential Revision: https://phabricator.haskell.org/D5199
  8. 01 Oct, 2018 1 commit
    • Ryan Scott's avatar
      Quantify class variables first in associated families' kinds · a57fa247
      Ryan Scott authored
      Previously, `kcLHsQTyVars` would always quantify class-bound
      variables invisibly in the kinds of associated types, resulting in
      #15591. We counteract this by explicitly passing the class-bound
      variables to `kcLHsQTyVars` and quantifying over the ones that are
      mentioned in the associated type such that (1) they are specified,
      and (2) they come before other kind variables.
      See `Note [Kind variable ordering for associated types]`.
      Test Plan: make test TEST=T15591
      Reviewers: goldfire, simonpj, bgamari
      Reviewed By: simonpj
      Subscribers: rwbarton, carter
      GHC Trac Issues: #15591
      Differential Revision: https://phabricator.haskell.org/D5159
  9. 20 Sep, 2018 1 commit
  10. 18 Sep, 2018 1 commit
  11. 17 Sep, 2018 1 commit
  12. 13 Sep, 2018 1 commit
  13. 07 Sep, 2018 2 commits
    • Takenobu Tani's avatar
      users-guide: Disable syntax highlighting · 2b6694a5
      Takenobu Tani authored
      I disabled syntax highlighting for NumericUnderscores extension.
      Because pygments does not yet correspond to syntax rule for NumericUnderscores.
      (Sphinx uses pygments as the syntax highlighting.)
      I've sent a pull-request to pygments project[1].
      But development of pygments has been suspended since 2017 March.
      [1]: https://bitbucket.org/birkenfeld/pygments-main/pull-requests/
      [ci skip]
      Test Plan: build
      Reviewers: bgamari, monoidal
      Reviewed By: monoidal
      Subscribers: rwbarton, carter
      Differential Revision: https://phabricator.haskell.org/D5120
    • Krzysztof Gogolewski's avatar
      Documentation tweaks · 4caad166
      Krzysztof Gogolewski authored
      - Mention static pointers in "stolen syntax"
      - Suggest importing Constraint and IsString from Data.* instead of GHC.*
      - Remove obsolete SPECIALISE syntax; it was removed in or before 1999
      - Fix link in pattern signatures
      Test Plan: build
      Reviewers: bgamari, takenobu
      Reviewed By: takenobu
      Subscribers: rwbarton, carter
      Differential Revision: https://phabricator.haskell.org/D5132
  14. 03 Sep, 2018 1 commit
  15. 28 Aug, 2018 1 commit
    • Ryan Scott's avatar
      Rename kind vars in left-to-right order in bindHsQTyVars · 102284e7
      Ryan Scott authored
      When renaming kind variables in an `LHsQTyVars`, we were
      erroneously putting all of the kind variables in the binders
      //after// the kind variables in the body, resulting in #15568. The
      fix is simple: just swap the order of these two around.
      Test Plan: make test TEST=T15568
      Reviewers: simonpj, bgamari, goldfire
      Reviewed By: goldfire
      Subscribers: goldfire, rwbarton, carter
      GHC Trac Issues: #15568
      Differential Revision: https://phabricator.haskell.org/D5108
  16. 07 Aug, 2018 1 commit
    • Herbert Valerio Riedel's avatar
      Turn on MonadFail desugaring by default · aab8656b
      Herbert Valerio Riedel authored
      This contains two commits:
      Make GHC's code-base compatible w/ `MonadFail`
      There were a couple of use-sites which implicitly used pattern-matches
      in `do`-notation even though the underlying `Monad` didn't explicitly
      support `fail`
      This refactoring turns those use-sites into explicit case
      discrimations and adds an `MonadFail` instance for `UniqSM`
      (`UniqSM` was the worst offender so this has been postponed for a
      follow-up refactoring)
      Turn on MonadFail desugaring by default
      This finally implements the phase scheduled for GHC 8.6 according to
      This also preserves some tests that assumed MonadFail desugaring to be
      active; all ghc boot libs were already made compatible with this
      `MonadFail` long ago, so no changes were needed there.
      Test Plan: Locally performed ./validate --fast
      Reviewers: bgamari, simonmar, jrtc27, RyanGlScott
      Reviewed By: bgamari
      Subscribers: bgamari, RyanGlScott, rwbarton, thomie, carter
      Differential Revision: https://phabricator.haskell.org/D5028
  17. 06 Aug, 2018 1 commit
  18. 02 Aug, 2018 1 commit
    • Richard Eisenberg's avatar
      Remove decideKindGeneralisationPlan · c955a514
      Richard Eisenberg authored
      TypeInType came with a new function: decideKindGeneralisationPlan.
      This type-level counterpart to the term-level decideGeneralisationPlan
      chose whether or not a kind should be generalized. The thinking was
      that if `let` should not be generalized, then kinds shouldn't either
      (under the same circumstances around -XMonoLocalBinds).
      However, this is too conservative -- the situation described in the
      motivation for "let should be be generalized" does not occur in types.
      This commit thus removes decideKindGeneralisationPlan, always
      One consequence is that tc_hs_sig_type_and_gen no longer calls
      solveEqualities, which reports all unsolved constraints, instead
      relying on the solveLocalEqualities in tcImplicitTKBndrs. An effect
      of this is that reporing kind errors gets delayed more frequently.
      This seems to be a net benefit in error reporting; often, alongside
      a kind error, the type error is now reported (and users might find
      type errors easier to understand).
      Some of these errors ended up at the top level, where it was
      discovered that the GlobalRdrEnv containing the definitions in the
      local module was not in the TcGblEnv, and thus errors were reported
      with qualified names unnecessarily. This commit rejiggers some of
      the logic around captureTopConstraints accordingly.
      One error message (typecheck/should_fail/T1633)
      is a regression, mentioning the name of a default method. However,
      that problem is already reported as #10087, its solution is far from
      clear, and so I'm not addressing it here.
      This commit fixes #15141. As it's an internal refactor, there is
      no concrete test case for it.
      Along the way, we no longer need the hsib_closed field of
      HsImplicitBndrs (it was used only in decideKindGeneralisationPlan)
      and so it's been removed, simplifying the datatype structure.
      Along the way, I removed code in the validity checker that looks
      at coercions. This isn't related to this patch, really (though
      it was, at one point), but it's an improvement, so I kept it.
      This updates the haddock submodule.
  19. 17 Jul, 2018 1 commit
  20. 16 Jul, 2018 1 commit
    • Vladislav Zavialov's avatar
      Do not imply NoStarIsType by TypeOperators/TypeInType · 65c186f0
      Vladislav Zavialov authored
      Implementation of the "Embrace TypeInType" proposal was done according
      to the spec, which specified that TypeOperators must imply NoStarIsType.
      This implication was meant to prevent breakage and to be removed in 2
      releases.  However, compiling head.hackage has shown that this
      implication only magnified the breakage, so there is no reason to have
      it in the first place.
      To remain in compliance with the three-release policy, we add a
      workaround to define the (*) type operator even when -XStarIsType is on.
      Test Plan: ./validate
      Reviewers: bgamari, RyanGlScott, goldfire, phadej, hvr
      Reviewed By: bgamari, RyanGlScott
      Subscribers: harpocrates, rwbarton, thomie, carter
      Differential Revision: https://phabricator.haskell.org/D4865
  21. 12 Jul, 2018 3 commits
    • Matthías Páll Gissurarson's avatar
      Add flag to show docs of valid hole fits · c4d98341
      Matthías Páll Gissurarson authored
      One issue with valid hole fits is that the function names can often be
      opaque for the uninitiated, such as `($)`. This diff adds a new flag,
      `-fshow-docs-of-hole-fits` that adds the documentation of the identifier
      in question to the message, using the same mechanism as the `:doc`
      As an example, with this flag enabled, the valid hole fits for `_ ::
      [Int] -> Int` will include:
      Valid hole fits include
        head :: forall a. [a] -> a
          {-^ Extract the first element of a list, which must be non-empty.-}
          with head @Int
          (imported from ‘Prelude’ (and originally defined in ‘GHC.List’))
      And one of the refinement hole fits, `($) _`, will read:
      Valid refinement hole fits include
        ($) (_ :: [Int] -> Int)
            where ($) :: forall a b. (a -> b) -> a -> b
            {-^ Application operator.  This operator is redundant, since ordinary
                application @(f x)@ means the same as @(f '$' x)@. However, '$' has
                low, right-associative binding precedence, so it sometimes allows
                parentheses to be omitted; for example:
                > f $ g $ h x  =  f (g (h x))
                It is also useful in higher-order situations, such as @'map' ('$' 0) xs@,
                or @'Data.List.zipWith' ('$') fs xs@.
                Note that @($)@ is levity-polymorphic in its result type, so that
                    foo $ True    where  foo :: Bool -> Int#
                is well-typed-}
            with ($) @'GHC.Types.LiftedRep @[Int] @Int
            (imported from ‘Prelude’ (and originally defined in ‘GHC.Base’))
      Another example of where documentation can come in very handy, is when
      working with the `lens` library.
      When you compile
      {-# OPTIONS_GHC -fno-show-provenance-of-hole-fits -fshow-docs-of-hole-fits #-}
      module LensDemo where
      import Control.Lens
      import Control.Monad.State
      newtype Test = Test { _value :: Int } deriving (Show)
      value :: Lens' Test Int
      value f (Test i) = Test <$> f i
      updTest :: Test -> Test
      updTest t = t &~ do
          _ value (1 :: Int)
      You get:
        Valid hole fits include
          (#=) :: forall s (m :: * -> *) a b.
                  MonadState s m =>
                  ALens s s a b -> b -> m ()
            {-^ A version of ('Control.Lens.Setter..=') that works on 'ALens'.-}
            with (#=) @Test @(StateT Test Identity) @Int @Int
          (<#=) :: forall s (m :: * -> *) a b.
                   MonadState s m =>
                   ALens s s a b -> b -> m b
            {-^ A version of ('Control.Lens.Setter.<.=') that works on 'ALens'.-}
            with (<#=) @Test @(StateT Test Identity) @Int @Int
          (<*=) :: forall s (m :: * -> *) a.
                   (MonadState s m, Num a) =>
                   LensLike' ((,) a) s a -> a -> m a
            {-^ Multiply the target of a numerically valued 'Lens' into your 'Monad''s
                state and return the result.
                When you do not need the result of the multiplication,
                ('Control.Lens.Setter.*=') is more flexible.
                ('<*=') :: ('MonadState' s m, 'Num' a) => 'Lens'' s a -> a -> m a
                ('<*=') :: ('MonadState' s m, 'Num' a) => 'Control.Lens.Iso.Iso'' s a -> a -> m a
            with (<*=) @Test @(StateT Test Identity) @Int
          (<+=) :: forall s (m :: * -> *) a.
                   (MonadState s m, Num a) =>
                   LensLike' ((,) a) s a -> a -> m a
            {-^ Add to the target of a numerically valued 'Lens' into your 'Monad''s state
                and return the result.
                When you do not need the result of the addition,
                ('Control.Lens.Setter.+=') is more flexible.
                ('<+=') :: ('MonadState' s m, 'Num' a) => 'Lens'' s a -> a -> m a
                ('<+=') :: ('MonadState' s m, 'Num' a) => 'Control.Lens.Iso.Iso'' s a -> a -> m a
            with (<+=) @Test @(StateT Test Identity) @Int
          (<-=) :: forall s (m :: * -> *) a.
                   (MonadState s m, Num a) =>
                   LensLike' ((,) a) s a -> a -> m a
            {-^ Subtract from the target of a numerically valued 'Lens' into your 'Monad''s
                state and return the result.
                When you do not need the result of the subtraction,
                ('Control.Lens.Setter.-=') is more flexible.
                ('<-=') :: ('MonadState' s m, 'Num' a) => 'Lens'' s a -> a -> m a
                ('<-=') :: ('MonadState' s m, 'Num' a) => 'Control.Lens.Iso.Iso'' s a -> a -> m a
            with (<-=) @Test @(StateT Test Identity) @Int
          (<<*=) :: forall s (m :: * -> *) a.
                    (MonadState s m, Num a) =>
                    LensLike' ((,) a) s a -> a -> m a
            {-^ Modify the target of a 'Lens' into your 'Monad''s state by multipling a value
                and return the /old/ value that was replaced.
                When you do not need the result of the operation,
                ('Control.Lens.Setter.*=') is more flexible.
                ('<<*=') :: ('MonadState' s m, 'Num' a) => 'Lens'' s a -> a -> m a
                ('<<*=') :: ('MonadState' s m, 'Num' a) => 'Iso'' s a -> a -> m a
            with (<<*=) @Test @(StateT Test Identity) @Int
          (Some hole fits suppressed; use -fmax-valid-hole-fits=N or -fno-max-valid-hole-fits)
      Which allows you to see at a glance what opaque operators like `(<<*=)`
      and `(<#=)` do.
      Reviewers: bgamari, sjakobi
      Reviewed By: sjakobi
      Subscribers: sjakobi, alexbiehl, rwbarton, thomie, carter
      Differential Revision: https://phabricator.haskell.org/D4848
    • AntC's avatar
      Trac #8581 users_guide/glasgow_exts section 10.7 · 471a992a
      AntC authored
      as per comments on the ticket; also linked to Haskell folk art of 'Smart constructors'.
    • Sasa Bogicevic's avatar
      Correct Simple to Complex wording · 5ee9a1cd
      Sasa Bogicevic authored
  22. 10 Jul, 2018 2 commits
  23. 06 Jul, 2018 1 commit
  24. 20 Jun, 2018 1 commit
  25. 17 Jun, 2018 1 commit
    • Ryan Scott's avatar
      Provide a better error message for unpromotable data constructor contexts · c6375411
      Ryan Scott authored
      Trac #14845 brought to light a corner case where a data
      constructor could not be promoted (even with `-XTypeInType`) due to
      an unpromotable constraint in its context. However, the error message
      was less than helpful, so this patch adds an additional check to
      `tcTyVar` catch unpromotable data constructors like these //before//
      they're promoted, and to give a sensible error message in such cases.
      Test Plan: make test TEST="T13895 T14845"
      Reviewers: simonpj, goldfire, bgamari
      Reviewed By: bgamari
      Subscribers: rwbarton, thomie, carter
      GHC Trac Issues: #13895, #14845
      Differential Revision: https://phabricator.haskell.org/D4728
  26. 16 Jun, 2018 1 commit
    • Richard Eisenberg's avatar
      Quantify unfixed kind variables in CUSKs · 12794287
      Richard Eisenberg authored
      This is a small change in user-facing behavior. When we
      have a unification variable left over in a CUSK, we previously
      would issue an error. But, we can just quantify. This also
      teaches kcLHsQTyVars to use quantifyTyVars instead of its own,
      ad-hoc quantification scheme.
      Fixes #15273.
      test case: polykinds/T11648b
  27. 15 Jun, 2018 1 commit
  28. 14 Jun, 2018 4 commits
    • Nathan Collins's avatar
    • Vladislav Zavialov's avatar
      Embrace -XTypeInType, add -XStarIsType · d650729f
      Vladislav Zavialov authored
      Implement the "Embrace Type :: Type" GHC proposal,
      GHC 8.0 included a major change to GHC's type system: the Type :: Type
      axiom. Though casual users were protected from this by hiding its
      features behind the -XTypeInType extension, all programs written in GHC
      8+ have the axiom behind the scenes. In order to preserve backward
      compatibility, various legacy features were left unchanged. For example,
      with -XDataKinds but not -XTypeInType, GADTs could not be used in types.
      Now these restrictions are lifted and -XTypeInType becomes a redundant
      flag that will be eventually deprecated.
      * Incorporate the features currently in -XTypeInType into the
        -XPolyKinds and -XDataKinds extensions.
      * Introduce a new extension -XStarIsType to control how to parse * in
        code and whether to print it in error messages.
      Test Plan: Validate
      Reviewers: goldfire, hvr, bgamari, alanz, simonpj
      Reviewed By: goldfire, simonpj
      Subscribers: rwbarton, thomie, mpickering, carter
      GHC Trac Issues: #15195
      Differential Revision: https://phabricator.haskell.org/D4748
    • Ben Gamari's avatar
    • Takenobu Tani's avatar
      users-guide: Fix PtrRepLifted to LiftedRep · 87d691c0
      Takenobu Tani authored
      Fix `TYPE 'PtrRepLifted` to `TYPE 'LiftedRep`
      [ci skip]
      Test Plan: build
      Reviewers: bgamari
      Reviewed By: bgamari
      Subscribers: rwbarton, thomie, carter
      Differential Revision: https://phabricator.haskell.org/D4818
  29. 10 Jun, 2018 1 commit
  30. 08 Jun, 2018 2 commits