[GHC] #10447: DeriveFoldable rejects instances with constraints in last argument of data type
GHC
ghc-devs at haskell.org
Thu May 28 09:59:26 UTC 2015
#10447: DeriveFoldable rejects instances with constraints in last argument of data
type
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.10.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: GHC rejects | Unknown/Multiple
valid program | Test Case:
Blocked By: | Blocking:
Related Tickets: #8678 | Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by ekmett):
Simon's examples definitely give me pause.
So putting aside type equality constraints for a moment, the other cases
seem unambiguous.
This would allow things like
{{{
data Set a where
Empty :: Set a
NonEmpty :: Ord a => Tree a
}}}
but wouldn't get us
{{{
data Val a where
Int :: Int -> Val Int
Char :: Char -> Val Char
}}}
To get there, it seems to me that `shachaf`'s `E` example seems a step
too far. Given
{{{
data Bar a = Bar a
data Foo a = Foo (Bar a b)
}}}
We don't attempt to walk into `Bar` and recursing into something that
isn't the last argument or relying on expansion seems "deeply magic", and
ill specified -- where does the recursion stop?
On the other hand, if we take Simon's examples, and say it'd be nice to
generate the same code for semantically equal data declarations, and to
allow whatever constraints we want, then using the type equality
constraint (a ~ X) as part of the check for naked `a`s and accepting a
naked `X` as an `a` seems very coherent.
Then in the presence of `(a ~ X)`, folding over all `X`'s immediately
inside the structure we're in and delegating all `(f X)`'s to the
`Foldable` for `f` would be consistent with the existing behavior.
If you wanted something more exotic where you skipped over some of them,
you'd have to write a hand-rolled instance.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10447#comment:14>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list