1. 04 Nov, 2014 1 commit
  2. 26 Sep, 2014 1 commit
  3. 09 Sep, 2014 1 commit
    • Austin Seipp's avatar
      Make Applicative a superclass of Monad · d94de872
      Austin Seipp authored
      
      
      Summary:
      This includes pretty much all the changes needed to make `Applicative`
      a superclass of `Monad` finally. There's mostly reshuffling in the
      interests of avoid orphans and boot files, but luckily we can resolve
      all of them, pretty much. The only catch was that
      Alternative/MonadPlus also had to go into Prelude to avoid this.
      
      As a result, we must update the hsc2hs and haddock submodules.
      Signed-off-by: default avatarAustin Seipp <austin@well-typed.com>
      
      Test Plan: Build things, they might not explode horribly.
      
      Reviewers: hvr, simonmar
      
      Subscribers: simonmar
      
      Differential Revision: https://phabricator.haskell.org/D13
      d94de872
  4. 29 Aug, 2014 1 commit
  5. 28 Aug, 2014 1 commit
    • Simon Peyton Jones's avatar
      Don't float out (classop dict e1 e2) · 949ad67e
      Simon Peyton Jones authored
      A class op applied to a dictionary doesn't do much work, so it's not
      a great idea to float it out (except possibly to the top level.
      
      See Note [Floating over-saturated applications] in SetLevels
      
      I also renamed "floatOutPartialApplications" to "floatOutOverSatApps";
      the former is deeply confusing, since there is no partial application
      involved -- quite the reverse, it is *over* saturated.
      949ad67e
  6. 15 May, 2014 1 commit
    • Herbert Valerio Riedel's avatar
      Add LANGUAGE pragmas to compiler/ source files · 23892440
      Herbert Valerio Riedel authored
      In some cases, the layout of the LANGUAGE/OPTIONS_GHC lines has been
      reorganized, while following the convention, to
      
      - place `{-# LANGUAGE #-}` pragmas at the top of the source file, before
        any `{-# OPTIONS_GHC #-}`-lines.
      
      - Moreover, if the list of language extensions fit into a single
        `{-# LANGUAGE ... -#}`-line (shorter than 80 characters), keep it on one
        line. Otherwise split into `{-# LANGUAGE ... -#}`-lines for each
        individual language extension. In both cases, try to keep the
        enumeration alphabetically ordered.
        (The latter layout is preferable as it's more diff-friendly)
      
      While at it, this also replaces obsolete `{-# OPTIONS ... #-}` pragma
      occurences by `{-# OPTIONS_GHC ... #-}` pragmas.
      23892440
  7. 10 Feb, 2014 1 commit
    • Joachim Breitner's avatar
      Implement CallArity analysis · cdceadf3
      Joachim Breitner authored
      This analysis finds out if a let-bound expression with lower manifest
      arity than type arity is always called with more arguments, as in that
      case eta-expansion is allowed and often viable. The analysis is very
      much tailored towards the code generated when foldl is implemented via
      foldr; without this analysis doing so would be a very bad idea!
      
      There are other ways to improve foldr/builder-fusion to cope with foldl,
      if any of these are implemented then this step can probably be moved to
      -O2 to save some compilation times. The current impact of adding this
      phase is just below +2% (measured running GHC's "make").
      cdceadf3
  8. 20 Jan, 2014 1 commit
  9. 09 Jan, 2014 1 commit
    • Simon Peyton Jones's avatar
      Re-work the naming story for the GHCi prompt (Trac #8649) · 73c08ab1
      Simon Peyton Jones authored
      The basic idea here is simple, and described in Note [The interactive package]
      in HscTypes, which starts thus:
      
          Note [The interactive package]
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          Type and class declarations at the command prompt are treated as if
          they were defined in modules
             interactive:Ghci1
             interactive:Ghci2
             ...etc...
          with each bunch of declarations using a new module, all sharing a
          common package 'interactive' (see Module.interactivePackageId, and
          PrelNames.mkInteractiveModule).
      
          This scheme deals well with shadowing.  For example:
      
             ghci> data T = A
             ghci> data T = B
             ghci> :i A
             data Ghci1.T = A  -- Defined at <interactive>:2:10
      
          Here we must display info about constructor A, but its type T has been
          shadowed by the second declaration.  But it has a respectable
          qualified name (Ghci1.T), and its source location says where it was
          defined.
      
          So the main invariant continues to hold, that in any session an original
          name M.T only refers to oe unique thing.  (In a previous iteration both
          the T's above were called :Interactive.T, albeit with different uniques,
          which gave rise to all sorts of trouble.)
      
      This scheme deals nicely with the original problem.  It allows us to
      eliminate a couple of grotseque hacks
        - Note [Outputable Orig RdrName] in HscTypes
        - Note [interactive name cache] in IfaceEnv
      (both these comments have gone, because the hacks they describe are no
      longer necessary). I was also able to simplify Outputable.QueryQualifyName,
      so that it takes a Module/OccName as args rather than a Name.
      
      However, matters are never simple, and this change took me an
      unreasonably long time to get right.  There are some details in
      Note [The interactive package] in HscTypes.
      73c08ab1
  10. 28 Nov, 2013 1 commit
    • Simon Peyton Jones's avatar
      More faff to get GHCi's top-level environment right · f3a84161
      Simon Peyton Jones authored
      This fixes #8540 (again), and simplifies matters a bit more. In
      particular, I got rid of ic_sys_vars altogether.  Mostly they can just
      go in ic_tythings, apart from dfuns, which are readily gettable from
      the instances anyway.
      
      See documentation in Note [Initialising the type environment for GHCi]
      in TcEnv.
      f3a84161
  11. 09 Oct, 2013 1 commit
    • Austin Seipp's avatar
      Nuke {save,restore}StaticFlagGlobals. · 16c40113
      Austin Seipp authored
      As discussed in #8276, this code was somewhat broken because while you
      could always revert the actual argument list, you can never revert the
      CAFs upon which they are based - so really this didn't buy you much.
      
      However, Haddock in particular expects to be able to parse GHC flags,
      including static flags, and used this code to do so. In its place, we
      instead have discardStaticFlags, which will safely remove any of the
      remaining 5 flags from a list of arguments. Haddock instead discards
      these, as they aren't related to anything it does anyway (mostly
      controlling debugging output and some basic optimizer phases.)
      
      This fixes #8276
      
      . In the future, we will eventually completely remove
      the remaining StaticFlags, removing the need for this fix. Unfortunately
      these changes will be quite invasive and require more time.
      Signed-off-by: default avatarAustin Seipp <austin@well-typed.com>
      16c40113
  12. 08 Oct, 2013 1 commit
  13. 01 Oct, 2013 1 commit
  14. 11 Sep, 2013 1 commit
  15. 03 Sep, 2013 1 commit
    • Simon Peyton Jones's avatar
      Improve Linting in GHCi (fixes Trac #8215) · dfa8ef03
      Simon Peyton Jones authored
      The original problem was that we weren't bringing varaibles bound in the
      interactive context into scope before Linting the result of a top-level
      declaration in GHCi.  (We were doing this for expressions.)
      
      Moreover I found that we weren't Linting the result of desugaring
      a GHCi expression, which we really should be doing.
      
      It took me a bit of time to unravel all this, and I did some refactoring
      to make it easier next time.
      
        * CoreMonad contains the Lint wrappers that get the right
          environments into place.  It always had endPass and lintPassResult
          (which Lints bindings), but now it has lintInteractiveExpr.
      
        * Both use a common function CoreMonad.interactiveInScope to find
          those in-scope variables.
      
      Quite a bit of knock-on effects from this, but nothing exciting.
      dfa8ef03
  16. 16 Jul, 2013 2 commits
  17. 06 Jul, 2013 1 commit
  18. 05 Jul, 2013 1 commit
  19. 03 Jul, 2013 1 commit
  20. 04 Jun, 2013 1 commit
  21. 01 Mar, 2013 2 commits
  22. 21 Dec, 2012 1 commit
  23. 02 Nov, 2012 1 commit
  24. 18 Oct, 2012 1 commit
    • ian@well-typed.com's avatar
      Refactor the way dump flags are handled · d4a19643
      ian@well-typed.com authored
      We were being inconsistent about how we tested whether dump flags
      were enabled; in particular, sometimes we also checked the verbosity,
      and sometimes we didn't.
      
      This lead to oddities such as "ghc -v4" printing an "Asm code" section
      which didn't contain any code, and "-v4" enabled some parts of
      "-ddump-deriv" but not others.
      
      Now all the tests use dopt, which also takes the verbosity into account
      as appropriate.
      d4a19643
  25. 16 Oct, 2012 2 commits
  26. 03 Sep, 2012 2 commits
  27. 22 Jun, 2012 1 commit
  28. 12 Jun, 2012 2 commits
  29. 11 Jun, 2012 1 commit
    • Ian Lynagh's avatar
      Pass DynFlags to the LogAction · 5716a2f8
      Ian Lynagh authored
      A side-effect is that we can no longer use the LogAction in
      defaultErrorHandler, as we don't have DynFlags at that point.
      But all that defaultErrorHandler did is to print Strings as
      SevFatal, so now it takes a 'FatalMessager' instead.
      5716a2f8
  30. 06 Jun, 2012 1 commit
  31. 29 May, 2012 1 commit
    • Ian Lynagh's avatar
      Replace printDump with a new Severity · 78252479
      Ian Lynagh authored
      We now use log_action with severity SevDump, rather than calling
      printDump. This means that what happens to dumped info is now under
      the control of the GHC API user, rather than always going to stdout.
      78252479
  32. 26 Apr, 2012 1 commit
  33. 04 Mar, 2012 1 commit
  34. 12 Jan, 2012 1 commit
    • Simon Peyton Jones's avatar
      Implememt -fdefer-type-errors (Trac #5624) · 5508ada4
      Simon Peyton Jones authored
      This patch implements the idea of deferring (most) type errors to
      runtime, instead emitting only a warning at compile time.  The
      basic idea is very simple:
      
       * The on-the-fly unifier in TcUnify never fails; instead if it
         gets stuck it emits a constraint.
      
       * The constraint solver tries to solve the constraints (and is
         entirely unchanged, hooray).
      
       * The remaining, unsolved constraints (if any) are passed to
         TcErrors.reportUnsolved.  With -fdefer-type-errors, instead of
         emitting an error message, TcErrors emits a warning, AND emits
         a binding for the constraint witness, binding it
         to (error "the error message"), via the new form of evidence
         TcEvidence.EvDelayedError.  So, when the program is run,
         when (and only when) that witness is needed, the program will
         crash with the exact same error message that would have been
         given at compile time.
      
      Simple really.  But, needless to say, the exercise forced me
      into some major refactoring.
      
       * TcErrors is almost entirely rewritten
      
       * EvVarX and WantedEvVar have gone away entirely
      
       * ErrUtils is changed a bit:
           * New Severity field in ErrMsg
           * Renamed the type Message to MsgDoc (this change
             touches a lot of files trivially)
      
       * One minor change is that in the constraint solver we try
         NOT to combine insoluble constraints, like Int~Bool, else
         all such type errors get combined together and result in
         only one error message!
      
       * I moved some definitions from TcSMonad to TcRnTypes,
         where they seem to belong more
      5508ada4
  35. 29 Dec, 2011 1 commit