1. 26 Oct, 2011 2 commits
  2. 25 Oct, 2011 3 commits
  3. 20 Oct, 2011 1 commit
  4. 19 Oct, 2011 1 commit
  5. 18 Oct, 2011 1 commit
  6. 17 Oct, 2011 3 commits
  7. 14 Oct, 2011 1 commit
  8. 27 Sep, 2011 1 commit
  9. 23 Sep, 2011 1 commit
    • Simon Peyton Jones's avatar
      Add a transformation limit to the simplifier (Trac #5448) · 24a2353a
      Simon Peyton Jones authored
      This addresses the rare cases where the simplifier diverges
      (see the above ticket).  We were already counting how many simplifier
      steps were taking place, but with no limit.  This patch adds a limit;
      at which point we halt compilation, and print out useful stats. The
      stats show what is begin inlined, and how often, which points you
      directly to the problem.  The limit is set based on the size of the
      program.
      
      Instead of halting compilation, we could instead just inhibit
      inlining, which would let compilation of the module complete. This is
      a bit harder to implement, and it's likely to mean that you unrolled
      the function 1143 times and then ran out of ticks; you probably don't
      want to complete parsing on this highly-unrolled program.
      
      Flags: -dsimpl-tick-factor=N.  Default is 100 (percent).
             A bigger number increases the allowed maximum tick count.
      24a2353a
  10. 07 Sep, 2011 1 commit
  11. 06 Sep, 2011 1 commit
    • batterseapower's avatar
      Implement -XConstraintKind · 9729fe7c
      batterseapower authored
      Basically as documented in http://hackage.haskell.org/trac/ghc/wiki/KindFact,
      this patch adds a new kind Constraint such that:
      
        Show :: * -> Constraint
        (?x::Int) :: Constraint
        (Int ~ a) :: Constraint
      
      And you can write *any* type with kind Constraint to the left of (=>):
      even if that type is a type synonym, type variable, indexed type or so on.
      
      The following (somewhat related) changes are also made:
       1. We now box equality evidence. This is required because we want
          to give (Int ~ a) the *lifted* kind Constraint
       2. For similar reasons, implicit parameters can now only be of
          a lifted kind. (?x::Int#) => ty is now ruled out
       3. Implicit parameter constraints are now allowed in superclasses
          and instance contexts (this just falls out as OK with the new
          constraint solver)
      
      Internally the following major changes were made:
       1. There is now no PredTy in the Type data type. Instead
          GHC checks the kind of a type to figure out if it is a predicate
       2. There is now no AClass TyThing: we represent classes as TyThings
          just as a ATyCon (classes had TyCons anyway)
       3. What used to be (~) is now pretty-printed as (~#). The box
          constructor EqBox :: (a ~# b) -> (a ~ b)
       4. The type LCoercion is used internally in the constraint solver
          and type checker to represent coercions with free variables
          of type (a ~ b) rather than (a ~# b)
      9729fe7c
  12. 01 Sep, 2011 1 commit
  13. 25 Aug, 2011 1 commit
  14. 16 Aug, 2011 2 commits
    • tibbe's avatar
      Add popCnt# primop · 2d0438f3
      tibbe authored
      2d0438f3
    • Simon Peyton Jones's avatar
      Major improvement to pattern bindings · 49dbe605
      Simon Peyton Jones authored
      This patch makes a number of related improvements
      
      a) Implements the Haskell Prime semantics for pattern bindings
         (Trac #2357).  That is, a pattern binding p = e is typed
         just as if it had been written
              t = e
              f = case t of p -> f
              g = case t of p -> g
              ... etc ...
         where f,g are the variables bound by p. In paricular it's
         ok to say
            (f,g) = (\x -> x, \y -> True)
         and f and g will get propertly inferred types
            f :: a -> a
            g :: a -> Int
      
      b) Eliminates the MonoPatBinds flag altogether.  (For the moment
         it is deprecated and has no effect.)  Pattern bindings are now
         generalised as per (a).  Fixes Trac #2187 and #4940, in the
         way the users wanted!
      
      c) Improves the OutsideIn algorithm generalisation decision.
         Given a definition without a type signature (implying "infer
         the type"), the published algorithm rule is this:
            - generalise *top-level* functions, and
            - do not generalise *nested* functions
         The new rule is
            - generalise a binding whose free variables have
              Guaranteed Closed Types
            - do not generalise other bindings
      
         Generally, a top-level let-bound function has a Guaranteed
         Closed Type, and so does a nested function whose free vaiables
         are top-level functions, and so on. (However a top-level
         function that is bitten by the Monomorphism Restriction does
         not have a GCT.)
      
         Example:
           f x = let { foo y = y } in ...
         Here 'foo' has no free variables, so it is generalised despite
         being nested.
      
      d) When inferring a type f :: ty for a definition f = e, check that
         the compiler would accept f :: ty as a type signature for that
         same definition.  The type is rejected precisely when the type
         is ambiguous.
      
         Example:
            class Wob a b where
              to :: a -> b
              from :: b -> a
      
            foo x = [x, to (from x)]
         GHC 7.0 would infer the ambiguous type
            foo :: forall a b. Wob a b => b -> [b]
         but that type would give an error whenever it is called; and
         GHC 7.0 would reject that signature if given by the
         programmer.  The new type checker rejects it up front.
      
         Similarly, with the advent of type families, ambiguous types are
         easy to write by mistake.  See Trac #1897 and linked tickets for
         many examples.  Eg
            type family F a :: *
            f ::: F a -> Int
            f x = 3
         This is rejected because (F a ~ F b) does not imply a~b.  Previously
         GHC would *infer* the above type for f, but was unable to check it.
         Now even the inferred type is rejected -- correctly.
      
      The main implemenation mechanism is to generalise the abe_wrap
      field of ABExport (in HsBinds), from [TyVar] to HsWrapper. This
      beautiful generalisation turned out to make everything work nicely
      with minimal programming effort.  All the work was fiddling around
      the edges; the core change was easy!
      49dbe605
  15. 14 Jul, 2011 1 commit
    • Ian Lynagh's avatar
      Separate the warning flags into their own datatype · 493ea4ab
      Ian Lynagh authored
      The -w flag wasn't turning off a few warnings (Opt_WarnMissingImportList,
      Opt_WarnMissingLocalSigs, Opt_WarnIdentities). Rather than just adding
      them, I've separated the Opt_Warn* contructors off into their own type,
      so -w now just sets the list of warning flags to [].
      493ea4ab
  16. 12 Jul, 2011 1 commit
  17. 11 Jul, 2011 1 commit
  18. 03 Jul, 2011 5 commits
    • Ian Lynagh's avatar
      Remove -fmethod-sharing · 2c9df426
      Ian Lynagh authored
      It was already deprecated, and marked for removal in 7.2.
      2c9df426
    • Ian Lynagh's avatar
      Remove the Opt_Generics constructor · b8f32576
      Ian Lynagh authored
      We no longer advertise that we support the Generics extension,
      although we still do accept -XGenerics and -XNoGenerics flags
      (but warn that we are ignoring them).
      
      I also remove the even older -fgenerics and -fno-generics flags.
      b8f32576
    • Ian Lynagh's avatar
      -optm is now deprecated · dfc32cd8
      Ian Lynagh authored
      dfc32cd8
    • Ian Lynagh's avatar
      defaultErrorHandler now only takes LogAction · e01fffc6
      Ian Lynagh authored
      It used to take a whole DynFlags, but that meant we had to
      create a DynFlags with (panic "No settings") for settings, as
      we didn't have any real settings.
      
      Now we just pass the LogAction, which is all that it actually needed.
      The default is exported from DynFlags as defaultLogAction.
      e01fffc6
    • Ian Lynagh's avatar
      Fix a copy-and-paste-o · 06922106
      Ian Lynagh authored
      06922106
  19. 02 Jul, 2011 1 commit
  20. 30 Jun, 2011 2 commits
  21. 29 Jun, 2011 1 commit
  22. 24 Jun, 2011 1 commit
  23. 18 Jun, 2011 7 commits