[GHC] #9545: Evaluate Takano Akio's foldrW/buildW fusion framework as a possible replacement for foldr/build

GHC ghc-devs at haskell.org
Thu Sep 11 00:56:07 UTC 2014


#9545: Evaluate Takano Akio's foldrW/buildW fusion framework as a possible
replacement for foldr/build
-------------------------------------+-------------------------------------
              Reporter:  dfeuer      |            Owner:
                  Type:  task        |           Status:  new
              Priority:  normal      |        Milestone:
             Component:              |          Version:  7.9
  libraries/base                     |         Keywords:
            Resolution:              |     Architecture:  Unknown/Multiple
      Operating System:              |       Difficulty:  Project (more
  Unknown/Multiple                   |  than a week)
       Type of failure:              |       Blocked By:
  None/Unknown                       |  Related Tickets:
             Test Case:              |
              Blocking:              |
Differential Revisions:              |
-------------------------------------+-------------------------------------

Comment (by dfeuer):

 === Progress ===

 Dan Doel has made a lot of progress implementing `foldrW/buildW` versions
 of major list-processing functions, with a drop of help from me. I've done
 some work on refactoring and rewrite rules. The `foldM` implementation
 seems to need the monadic right identity law, `m >>= return = m`, to be
 implemented in `RULES` in order to get clean Core for the general case
 (inlining may clean it up at some point for specific instances). I really
 hope no one is breaking this law.

 === Challenges ===

 The `buildWForgetful` thing is now fairly clearly the wrong way to go. It
 seems fine if a "static" producer is tied directly to a pure consumer, but
 if it's tied to a transformer, bugs go flying everywhere. It therefore
 seems likely to need some help from the compiler to clean up these static
 args.

 The current SAT criterion for what should be transformed is ''not''
 sufficient to clean up the static args `foldrW/buildW` sometimes produces.
 In particular, SAT currently will ''only'' touch functions with at least
 two static args, which these generally don't. It may be possible to find
 other criteria for SAT being likely to be good. One particularly obnoxious
 situation I've seen a couple times is a static argument whose value is
 actually known at compile time. For example, the "index too large or list
 empty" error message gets passed around through the recursion in `(!!)`. I
 don't think preserving that sort of static argument can ''ever'' be good.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9545#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list