1. 30 Oct, 2008 3 commits
    • simonpj@microsoft.com's avatar
      Improve error reporting for non-rigid GADT matches · 259d5ea8
      simonpj@microsoft.com authored
      Following suggestions from users, this patch improves the error message
      when a GADT match needs a rigid type:
      
       tcfail172.hs:19:10:
           GADT pattern match in non-rigid context for `Nil'
      -      Solution: add a type signature
      +      Probable solution: add a type signature for `is_normal'
           In the pattern: Nil
           In the definition of `is_normal': is_normal Nil = True
      
      Now GHC tries to tell you what to give a type signature *for*.
      Thanks to Daniel Gorin and others for the suggestions.
      259d5ea8
    • simonpj@microsoft.com's avatar
      Add (a) CoreM monad, (b) new Annotations feature · 9bcd95ba
      simonpj@microsoft.com authored
      This patch, written by Max Bolingbroke,  does two things
      
      1.  It adds a new CoreM monad (defined in simplCore/CoreMonad),
          which is used as the top-level monad for all the Core-to-Core
          transformations (starting at SimplCore).  It supports
             * I/O (for debug printing)
             * Unique supply
             * Statistics gathering
             * Access to the HscEnv, RuleBase, Annotations, Module
          The patch therefore refactors the top "skin" of every Core-to-Core
          pass, but does not change their functionality.
      
      2.  It adds a completely new facility to GHC: Core "annotations".
          The idea is that you can say
             {#- ANN foo (Just "Hello") #-}
          which adds the annotation (Just "Hello") to the top level function
          foo.  These annotations can be looked up in any Core-to-Core pass,
          and are persisted into interface files.  (Hence a Core-to-Core pass
          can also query the annotations of imported things.)  Furthermore,
          a Core-to-Core pass can add new annotations (eg strictness info)
          of its own, which can be queried by importing modules.
      
      The design of the annotation system is somewhat in flux.  It's
      designed to work with the (upcoming) dynamic plug-ins mechanism,
      but is meanwhile independently useful.
      
      Do not merge to 6.10!  
      9bcd95ba
    • simonpj@microsoft.com's avatar
  2. 29 Oct, 2008 3 commits
    • simonpj@microsoft.com's avatar
      Change naming conventions for compiler-generated dictionaries and type functions · 3bf13c88
      simonpj@microsoft.com authored
      Up to now, the data constructor dictionary for class C as been called
      ":DC". But there is no reason for the colon to be at the front; indeed
      it confuses the (simple-minded) pretty-printer for types.  So this
      patch changes it to be "D:C".  This makes Core a lot easier to read.
      Having a colon in the middle ensures that it can't clash with a user-written
      data type.
      
      Similarly I changed
      
        T:C 	   Data type corresponding a class dictionary (was :TC)
        D:C	   Data constructor for class dictionary (was :DC)
      
        NTCo:T   Coercion mapping from a newtype T to its representation type
      		(was :CoT)
      
        TFCo:R   Coercion mapping from a data family to its respresentation type R
      		(was :CoFR)
      
        Rn:T     The n'th respresentation data type for a data type T
      		(was :RnT)
      
      
      Do not merge to 6.10.
      
      HEADS-UP: you'll need to recompile libraries from scratch.  
      
      ROMAN: you could do the same for OccName.mkVectTyConOcc etc, if you wanted.
      
      3bf13c88
    • simonpj@microsoft.com's avatar
      a854a0b9
    • simonpj@microsoft.com's avatar
      592b4048
  3. 28 Oct, 2008 2 commits
    • simonpj@microsoft.com's avatar
      Fix Trac #2720: inlining and casts · c3fe0f36
      simonpj@microsoft.com authored
      The issue here is what happens when we have
      
      	(f |> co) x
      
      where f is itself marked INLINE.  We want callSiteInline to "see" 
      the fact that the function is applied, and hence have some incentive
      to inline.  I've done this by extending CoreUnfold.CallCtxt with 
      ValAppCtxt.  I think that should catch this case without messing up
      any of the others.
      c3fe0f36
    • simonpj@microsoft.com's avatar
      Clarify documentatoin · bc35c8ed
      simonpj@microsoft.com authored
      bc35c8ed
  4. 23 Oct, 2008 1 commit
  5. 07 Oct, 2008 1 commit
  6. 20 Sep, 2008 2 commits
  7. 28 Oct, 2008 6 commits
  8. 27 Oct, 2008 1 commit
  9. 25 Oct, 2008 1 commit
  10. 24 Oct, 2008 3 commits
  11. 22 Oct, 2008 1 commit
  12. 23 Oct, 2008 3 commits
    • Simon Marlow's avatar
      Fix a bug in the new scheduler · bd6fe3a3
      Simon Marlow authored
      If the current thread blocks, we should yield the Capability
      immediately, because the thread and hence possibly the current Task
      are now owned by someone else.  This worked in the old scheduler, but
      we moved where the yield happens in the new scheduler which broke it.
      bd6fe3a3
    • Simon Marlow's avatar
      add an assertion · a4326c0e
      Simon Marlow authored
      a4326c0e
    • Simon Marlow's avatar
      fix a warning · bc2528b8
      Simon Marlow authored
      bc2528b8
  13. 22 Oct, 2008 2 commits
    • Simon Marlow's avatar
    • Simon Marlow's avatar
      Refactoring and reorganisation of the scheduler · 99df892c
      Simon Marlow authored
      Change the way we look for work in the scheduler.  Previously,
      checking to see whether there was anything to do was a
      non-side-effecting operation, but this has changed now that we do
      work-stealing.  This lead to a refactoring of the inner loop of the
      scheduler.
      
      Also, lots of cleanup in the new work-stealing code, but no functional
      changes.
      
      One new statistic is added to the +RTS -s output:
      
        SPARKS: 1430 (2 converted, 1427 pruned)
      
      lets you know something about the use of `par` in the program.
      99df892c
  14. 15 Sep, 2008 1 commit
    • berthold@mathematik.uni-marburg.de's avatar
      Work stealing for sparks · cf9650f2
      berthold@mathematik.uni-marburg.de authored
         Spark stealing support for PARALLEL_HASKELL and THREADED_RTS versions of the RTS.
        
        Spark pools are per capability, separately allocated and held in the Capability 
        structure. The implementation uses Double-Ended Queues (deque) and cas-protected 
        access.
        
        The write end of the queue (position bottom) can only be used with
        mutual exclusion, i.e. by exactly one caller at a time.
        Multiple readers can steal()/findSpark() from the read end
        (position top), and are synchronised without a lock, based on a cas
        of the top position. One reader wins, the others return NULL for a
        failure.
        
        Work stealing is called when Capabilities find no other work (inside yieldCapability),
        and tries all capabilities 0..n-1 twice, unless a theft succeeds.
        
        Inside schedulePushWork, all considered cap.s (those which were idle and could 
        be grabbed) are woken up. Future versions should wake up capabilities immediately when 
        putting a new spark in the local pool, from newSpark().
      
      Patch has been re-recorded due to conflicting bugfixes in the sparks.c, also fixing a 
      (strange) conflict in the scheduler.
      cf9650f2
  15. 23 Oct, 2008 2 commits
  16. 22 Oct, 2008 1 commit
  17. 21 Oct, 2008 7 commits
    • chak@cse.unsw.edu.au.'s avatar
      Reject programs with superclass equalities for now · 52d22b94
      chak@cse.unsw.edu.au. authored
      - The current implementation of type families cannot properly deal
        with superclass equalities.  Instead of making a half-hearted attempt at
        supporting them, which mostly ends in cryptic error message, rejecting
        right away with an appropriate message.
      
        MERGE TO 6.10
      52d22b94
    • Ian Lynagh's avatar
      Fix doc syntax · f5209837
      Ian Lynagh authored
      f5209837
    • Ian Lynagh's avatar
      Don't put the README file in the Windows installer; fixes trac #2698 · 01b2aae1
      Ian Lynagh authored
      The README file talks about getting and building the sources, which
      doesn't make sense for the installer.
      01b2aae1
    • simonpj@microsoft.com's avatar
      Comments and parens only · 61182b32
      simonpj@microsoft.com authored
      61182b32
    • simonpj@microsoft.com's avatar
      Do proper cloning in worker/wrapper splitting · 2617ec29
      simonpj@microsoft.com authored
      See Note [Freshen type variables] in WwLib.  We need to clone type
      variables when building a worker/wrapper split, else we simply get
      bogus code, admittedly in rather obscure situations.  I can't quite
      remember what program showed this up, unfortunately, but there 
      definitely *was* one!  (You get a Lint error.)
      2617ec29
    • simonpj@microsoft.com's avatar
      Don't float an expression wrapped in a cast · e1e3d37b
      simonpj@microsoft.com authored
      There is no point in floating out an expression wrapped in a coercion;
      If we do we'll transform  
      	lvl = e |> co [_$_]
      to  	
      	lvl' = e; lvl = lvl' |> co
      and then inline lvl.  Better just to float out the payload (e).
      e1e3d37b
    • simonpj@microsoft.com's avatar
      Fix Trac #2668, and refactor TcDeriv · da1de991
      simonpj@microsoft.com authored
      TcDeriv deals with both standalone and ordinary 'deriving';
      and with both data types and 'newtype deriving'.  The result
      is really rather compilcated and ad hoc.  Ryan discovered
      #2668; this patch fixes that bug, and makes the internal interfces
      #more uniform.  Specifically, the business of knocking off 
      type arguments from the instance type until it matches the kind of the
      class, is now done by derivTyData, not mkNewTypeEqn, because the
      latter is shared with standalone derriving, whree the trimmed
      type application is what the user wrote.
      da1de991