From b359c886cd7578ed083bcedcea05d315ecaeeb54 Mon Sep 17 00:00:00 2001 From: "Iavor S. Diatchki" Date: Sat, 7 Mar 2015 10:37:31 -0600 Subject: Custom `Typeable` solver, that keeps track of kinds. Summary: This implements the new `Typeable` solver: when GHC sees `Typeable` constraints it solves them on the spot. The current implementation creates `TyCon` representations on the spot. Pro: No overhead at all in code that does not use `Typeable` Cons: Code that uses `Typeable` may create multipe `TyCon` represntations. We have discussed an implementation where representations of `TyCons` are computed once, in the module, where a datatype is declared. This would lead to more code being generated: for a promotable datatype we need to generate `2 + number_of_data_cons` type-constructro representations, and we have to do that for all programs, even ones that do not intend to use typeable. I added code to emit warning whenevar `deriving Typeable` is encountered--- the idea being that this is not needed anymore, and shold be fixed. Also, we allow `instance Typeable T` in .hs-boot files, but they result in a warning, and are ignored. This last one was to avoid breaking exisitng code, and should become an error, eventually. Test Plan: 1. GHC can compile itself. 2. I compiled a number of large libraries, including `lens`. - I had to make some small changes: `unordered-containers` uses internals of `TypeReps`, so I had to do a 1 line fix - `lens` needed one instance changed, due to a poly-kinded `Typeble` instance 3. I also run some code that uses `syb` to traverse a largish datastrucutre. I didn't notice any signifiant performance difference between the 7.8.3 version, and this implementation. Reviewers: simonpj, simonmar, austin, hvr Reviewed By: austin, hvr Subscribers: thomie Differential Revision: https://phabricator.haskell.org/D652 GHC Trac Issues: #9858 --- testsuite/tests/annotations/should_fail/annfail10.stderr | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'testsuite/tests/annotations') diff --git a/testsuite/tests/annotations/should_fail/annfail10.stderr b/testsuite/tests/annotations/should_fail/annfail10.stderr index 262677b7f8..5b42bd3c9b 100644 --- a/testsuite/tests/annotations/should_fail/annfail10.stderr +++ b/testsuite/tests/annotations/should_fail/annfail10.stderr @@ -7,9 +7,8 @@ annfail10.hs:9:1: Data.Data.Data (Either a b) -- Defined in ‘Data.Data’ instance Data.Data.Data Data.Monoid.All -- Defined in ‘Data.Data’ - instance forall (k :: BOX) (f :: k -> *) (a :: k). - (Data.Data.Data (f a), Data.Typeable.Internal.Typeable f, - Data.Typeable.Internal.Typeable a) => + instance (Data.Data.Data (f a), Data.Data.Data a, + Data.Typeable.Internal.Typeable f) => Data.Data.Data (Data.Monoid.Alt f a) -- Defined in ‘Data.Data’ ...plus 39 others -- cgit v1.2.1