{-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fplugin Data.Constraint.Deriving #-} {-# OPTIONS_GHC -fplugin-opt Data.Constraint.Deriving:dump-instances #-} module Spec.DeriveAll01 where import Data.Constraint.Deriving data family FooFam a b data instance FooFam Int b = FooInt b Int deriving Eq data instance FooFam Double b = FooDouble Double b b deriving Read data instance FooFam Float Float = FooFloats Float Float deriving (Eq, Ord) data instance FooFam Float String = FooString Float String deriving Show {-# ANN type TestNewtype1 DeriveAll #-} newtype TestNewtype1 a b = TestNewtype1C (FooFam a b) {-# ANN type TestNewtype2 DeriveAll #-} newtype TestNewtype2 a b r = TestNewtype2C r type instance DeriveContext (TestNewtype2 a b r) = FooFam a b ~ r