[GHC] #13280: Consider deriving more Foldable methods
GHC
ghc-devs at haskell.org
Tue Feb 14 02:10:29 UTC 2017
#13280: Consider deriving more Foldable methods
-------------------------------------+-------------------------------------
Reporter: dfeuer | Owner: (none)
Type: task | Status: new
Priority: normal | Milestone: 8.2.1
Component: Compiler | Version: 8.0.1
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: Runtime
Unknown/Multiple | performance bug
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
We currently derive `foldMap` and `foldr`, but some others may deserve
attention as well.
* The most critical spots are probably `length` and `null`. Deriving these
instead of using the defaults can change the orders of growth! Given `data
Tree a = Bin !(Tree a) a !(Tree a) | Tip`, we surely don't want `null` to
traverse the whole spine of the tree when it's quite immediately obvious
that `Bin` is never null. And if a constructor contains a type with a very
efficient `length` or `null` implementation (e.g., one that stores its own
size), we certainly want to use that.
* `foldl` typically ends up with rather different code than `foldr` (for a
recursive type) even after simplification. We need to check whether this
has a performance impact, but my bet is that it will in cases where the
optimizer can't understand what's going on well enough.
* `foldl'` and `foldr'` are a bit tricky. Ideally, if we have something
like `data T a = C (G a) a | ...` then we'd like to be able to use `G`'s
`foldl'` definition to define `T`'s. Unfortunately, different types in the
wild have different `foldl'` semantics (and indeed the semantics for `[]`
changed by mistake fairly recently). So we have to decide to what extent
the derived semantics should depend on the choices of included types. I
think we should probably just depend, because that seems likely what
people will expect and want.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13280>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list