packages feed

easytensor 0.3.2.0 → 0.4.0.0

raw patch · 4 files changed

+638/−580 lines, 4 filesdep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base

API changes (from Hackage documentation)

- Numeric.Semigroup.StrictTuple: T0 :: T0
- Numeric.Semigroup.StrictTuple: T1 :: a -> T1 a
- Numeric.Semigroup.StrictTuple: T2 :: a -> b -> T2 a b
- Numeric.Semigroup.StrictTuple: T3 :: a -> b -> c -> T3 a b c
- Numeric.Semigroup.StrictTuple: T4 :: a -> b -> c -> d -> T4 a b c d
- Numeric.Semigroup.StrictTuple: T5 :: a -> b -> c -> d -> e -> T5 a b c d e
- Numeric.Semigroup.StrictTuple: T6 :: a -> b -> c -> d -> e -> f -> T6 a b c d e f
- Numeric.Semigroup.StrictTuple: T7 :: a -> b -> c -> d -> e -> f -> g -> T7 a b c d e f g
- Numeric.Semigroup.StrictTuple: T8 :: a -> b -> c -> d -> e -> f -> g -> h -> T8 a b c d e f g h
- Numeric.Semigroup.StrictTuple: T9 :: a -> b -> c -> d -> e -> f -> g -> h -> i -> T9 a b c d e f g h i
- Numeric.Semigroup.StrictTuple: class StrictTuple a b | a -> b, b -> a
- Numeric.Semigroup.StrictTuple: data T0
- Numeric.Semigroup.StrictTuple: data T2 a b
- Numeric.Semigroup.StrictTuple: data T3 a b c
- Numeric.Semigroup.StrictTuple: data T4 a b c d
- Numeric.Semigroup.StrictTuple: data T5 a b c d e
- Numeric.Semigroup.StrictTuple: data T6 a b c d e f
- Numeric.Semigroup.StrictTuple: data T7 a b c d e f g
- Numeric.Semigroup.StrictTuple: data T8 a b c d e f g h
- Numeric.Semigroup.StrictTuple: data T9 a b c d e f g h i
- Numeric.Semigroup.StrictTuple: fromStrictTuple :: StrictTuple a b => b -> a
- Numeric.Semigroup.StrictTuple: instance (Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Semigroup.StrictTuple.T2 a b)
- Numeric.Semigroup.StrictTuple: instance (Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Semigroup.StrictTuple.T3 a b c)
- Numeric.Semigroup.StrictTuple: instance (Data.Data.Data d, Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Semigroup.StrictTuple.T4 a b c d)
- Numeric.Semigroup.StrictTuple: instance (Data.Data.Data e, Data.Data.Data d, Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Semigroup.StrictTuple.T5 a b c d e)
- Numeric.Semigroup.StrictTuple: instance (Data.Data.Data f, Data.Data.Data e, Data.Data.Data d, Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Semigroup.StrictTuple.T6 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance (Data.Data.Data g, Data.Data.Data f, Data.Data.Data e, Data.Data.Data d, Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Semigroup.StrictTuple.T7 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance (Data.Data.Data h, Data.Data.Data g, Data.Data.Data f, Data.Data.Data e, Data.Data.Data d, Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Semigroup.StrictTuple.T8 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance (Data.Data.Data i, Data.Data.Data h, Data.Data.Data g, Data.Data.Data f, Data.Data.Data e, Data.Data.Data d, Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h i)
- Numeric.Semigroup.StrictTuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b) => Data.Semigroup.Semigroup (Numeric.Semigroup.StrictTuple.T2 a b)
- Numeric.Semigroup.StrictTuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c) => Data.Semigroup.Semigroup (Numeric.Semigroup.StrictTuple.T3 a b c)
- Numeric.Semigroup.StrictTuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c, Data.Semigroup.Semigroup d) => Data.Semigroup.Semigroup (Numeric.Semigroup.StrictTuple.T4 a b c d)
- Numeric.Semigroup.StrictTuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c, Data.Semigroup.Semigroup d, Data.Semigroup.Semigroup e) => Data.Semigroup.Semigroup (Numeric.Semigroup.StrictTuple.T5 a b c d e)
- Numeric.Semigroup.StrictTuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c, Data.Semigroup.Semigroup d, Data.Semigroup.Semigroup e, Data.Semigroup.Semigroup f) => Data.Semigroup.Semigroup (Numeric.Semigroup.StrictTuple.T6 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c, Data.Semigroup.Semigroup d, Data.Semigroup.Semigroup e, Data.Semigroup.Semigroup f, Data.Semigroup.Semigroup g) => Data.Semigroup.Semigroup (Numeric.Semigroup.StrictTuple.T7 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c, Data.Semigroup.Semigroup d, Data.Semigroup.Semigroup e, Data.Semigroup.Semigroup f, Data.Semigroup.Semigroup g, Data.Semigroup.Semigroup h) => Data.Semigroup.Semigroup (Numeric.Semigroup.StrictTuple.T8 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c, Data.Semigroup.Semigroup d, Data.Semigroup.Semigroup e, Data.Semigroup.Semigroup f, Data.Semigroup.Semigroup g, Data.Semigroup.Semigroup h, Data.Semigroup.Semigroup i) => Data.Semigroup.Semigroup (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h i)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b) => GHC.Base.Applicative (Numeric.Semigroup.StrictTuple.T3 a b)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b) => GHC.Base.Monad (Numeric.Semigroup.StrictTuple.T3 a b)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b) => GHC.Base.Monoid (Numeric.Semigroup.StrictTuple.T2 a b)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c) => GHC.Base.Applicative (Numeric.Semigroup.StrictTuple.T4 a b c)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c) => GHC.Base.Monad (Numeric.Semigroup.StrictTuple.T4 a b c)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c) => GHC.Base.Monoid (Numeric.Semigroup.StrictTuple.T3 a b c)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d) => GHC.Base.Applicative (Numeric.Semigroup.StrictTuple.T5 a b c d)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d) => GHC.Base.Monad (Numeric.Semigroup.StrictTuple.T5 a b c d)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d) => GHC.Base.Monoid (Numeric.Semigroup.StrictTuple.T4 a b c d)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e) => GHC.Base.Applicative (Numeric.Semigroup.StrictTuple.T6 a b c d e)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e) => GHC.Base.Monad (Numeric.Semigroup.StrictTuple.T6 a b c d e)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e) => GHC.Base.Monoid (Numeric.Semigroup.StrictTuple.T5 a b c d e)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f) => GHC.Base.Applicative (Numeric.Semigroup.StrictTuple.T7 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f) => GHC.Base.Monad (Numeric.Semigroup.StrictTuple.T7 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f) => GHC.Base.Monoid (Numeric.Semigroup.StrictTuple.T6 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g) => GHC.Base.Applicative (Numeric.Semigroup.StrictTuple.T8 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g) => GHC.Base.Monad (Numeric.Semigroup.StrictTuple.T8 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g) => GHC.Base.Monoid (Numeric.Semigroup.StrictTuple.T7 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g, GHC.Base.Monoid h) => GHC.Base.Applicative (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g, GHC.Base.Monoid h) => GHC.Base.Monad (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g, GHC.Base.Monoid h) => GHC.Base.Monoid (Numeric.Semigroup.StrictTuple.T8 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g, GHC.Base.Monoid h, GHC.Base.Monoid i) => GHC.Base.Monoid (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h i)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Semigroup.StrictTuple.T2 a b)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Semigroup.StrictTuple.T3 a b c)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Eq d, GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Semigroup.StrictTuple.T4 a b c d)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Eq e, GHC.Classes.Eq d, GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Semigroup.StrictTuple.T5 a b c d e)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Eq f, GHC.Classes.Eq e, GHC.Classes.Eq d, GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Semigroup.StrictTuple.T6 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Eq g, GHC.Classes.Eq f, GHC.Classes.Eq e, GHC.Classes.Eq d, GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Semigroup.StrictTuple.T7 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Eq h, GHC.Classes.Eq g, GHC.Classes.Eq f, GHC.Classes.Eq e, GHC.Classes.Eq d, GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Semigroup.StrictTuple.T8 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Eq i, GHC.Classes.Eq h, GHC.Classes.Eq g, GHC.Classes.Eq f, GHC.Classes.Eq e, GHC.Classes.Eq d, GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h i)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Semigroup.StrictTuple.T2 a b)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Semigroup.StrictTuple.T3 a b c)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Ord d, GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Semigroup.StrictTuple.T4 a b c d)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Ord e, GHC.Classes.Ord d, GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Semigroup.StrictTuple.T5 a b c d e)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Ord f, GHC.Classes.Ord e, GHC.Classes.Ord d, GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Semigroup.StrictTuple.T6 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Ord g, GHC.Classes.Ord f, GHC.Classes.Ord e, GHC.Classes.Ord d, GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Semigroup.StrictTuple.T7 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Ord h, GHC.Classes.Ord g, GHC.Classes.Ord f, GHC.Classes.Ord e, GHC.Classes.Ord d, GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Semigroup.StrictTuple.T8 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance (GHC.Classes.Ord i, GHC.Classes.Ord h, GHC.Classes.Ord g, GHC.Classes.Ord f, GHC.Classes.Ord e, GHC.Classes.Ord d, GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h i)
- Numeric.Semigroup.StrictTuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b) => GHC.Enum.Bounded (Numeric.Semigroup.StrictTuple.T2 a b)
- Numeric.Semigroup.StrictTuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c) => GHC.Enum.Bounded (Numeric.Semigroup.StrictTuple.T3 a b c)
- Numeric.Semigroup.StrictTuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c, GHC.Enum.Bounded d) => GHC.Enum.Bounded (Numeric.Semigroup.StrictTuple.T4 a b c d)
- Numeric.Semigroup.StrictTuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c, GHC.Enum.Bounded d, GHC.Enum.Bounded e) => GHC.Enum.Bounded (Numeric.Semigroup.StrictTuple.T5 a b c d e)
- Numeric.Semigroup.StrictTuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c, GHC.Enum.Bounded d, GHC.Enum.Bounded e, GHC.Enum.Bounded f) => GHC.Enum.Bounded (Numeric.Semigroup.StrictTuple.T6 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c, GHC.Enum.Bounded d, GHC.Enum.Bounded e, GHC.Enum.Bounded f, GHC.Enum.Bounded g) => GHC.Enum.Bounded (Numeric.Semigroup.StrictTuple.T7 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c, GHC.Enum.Bounded d, GHC.Enum.Bounded e, GHC.Enum.Bounded f, GHC.Enum.Bounded g, GHC.Enum.Bounded h) => GHC.Enum.Bounded (Numeric.Semigroup.StrictTuple.T8 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c, GHC.Enum.Bounded d, GHC.Enum.Bounded e, GHC.Enum.Bounded f, GHC.Enum.Bounded g, GHC.Enum.Bounded h, GHC.Enum.Bounded i) => GHC.Enum.Bounded (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h i)
- Numeric.Semigroup.StrictTuple: instance (GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Semigroup.StrictTuple.T2 a b)
- Numeric.Semigroup.StrictTuple: instance (GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Semigroup.StrictTuple.T3 a b c)
- Numeric.Semigroup.StrictTuple: instance (GHC.Read.Read d, GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Semigroup.StrictTuple.T4 a b c d)
- Numeric.Semigroup.StrictTuple: instance (GHC.Read.Read e, GHC.Read.Read d, GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Semigroup.StrictTuple.T5 a b c d e)
- Numeric.Semigroup.StrictTuple: instance (GHC.Read.Read f, GHC.Read.Read e, GHC.Read.Read d, GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Semigroup.StrictTuple.T6 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance (GHC.Read.Read g, GHC.Read.Read f, GHC.Read.Read e, GHC.Read.Read d, GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Semigroup.StrictTuple.T7 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance (GHC.Read.Read h, GHC.Read.Read g, GHC.Read.Read f, GHC.Read.Read e, GHC.Read.Read d, GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Semigroup.StrictTuple.T8 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance (GHC.Read.Read i, GHC.Read.Read h, GHC.Read.Read g, GHC.Read.Read f, GHC.Read.Read e, GHC.Read.Read d, GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h i)
- Numeric.Semigroup.StrictTuple: instance (GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Semigroup.StrictTuple.T2 a b)
- Numeric.Semigroup.StrictTuple: instance (GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Semigroup.StrictTuple.T3 a b c)
- Numeric.Semigroup.StrictTuple: instance (GHC.Show.Show d, GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Semigroup.StrictTuple.T4 a b c d)
- Numeric.Semigroup.StrictTuple: instance (GHC.Show.Show e, GHC.Show.Show d, GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Semigroup.StrictTuple.T5 a b c d e)
- Numeric.Semigroup.StrictTuple: instance (GHC.Show.Show f, GHC.Show.Show e, GHC.Show.Show d, GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Semigroup.StrictTuple.T6 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance (GHC.Show.Show g, GHC.Show.Show f, GHC.Show.Show e, GHC.Show.Show d, GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Semigroup.StrictTuple.T7 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance (GHC.Show.Show h, GHC.Show.Show g, GHC.Show.Show f, GHC.Show.Show e, GHC.Show.Show d, GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Semigroup.StrictTuple.T8 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance (GHC.Show.Show i, GHC.Show.Show h, GHC.Show.Show g, GHC.Show.Show f, GHC.Show.Show e, GHC.Show.Show d, GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h i)
- Numeric.Semigroup.StrictTuple: instance Data.Bifunctor.Bifunctor (Numeric.Semigroup.StrictTuple.T3 a)
- Numeric.Semigroup.StrictTuple: instance Data.Bifunctor.Bifunctor (Numeric.Semigroup.StrictTuple.T4 a b)
- Numeric.Semigroup.StrictTuple: instance Data.Bifunctor.Bifunctor (Numeric.Semigroup.StrictTuple.T5 a b c)
- Numeric.Semigroup.StrictTuple: instance Data.Bifunctor.Bifunctor (Numeric.Semigroup.StrictTuple.T6 a b c d)
- Numeric.Semigroup.StrictTuple: instance Data.Bifunctor.Bifunctor (Numeric.Semigroup.StrictTuple.T7 a b c d e)
- Numeric.Semigroup.StrictTuple: instance Data.Bifunctor.Bifunctor (Numeric.Semigroup.StrictTuple.T8 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance Data.Bifunctor.Bifunctor (Numeric.Semigroup.StrictTuple.T9 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance Data.Bifunctor.Bifunctor Numeric.Semigroup.StrictTuple.T2
- Numeric.Semigroup.StrictTuple: instance Data.Data.Data Numeric.Semigroup.StrictTuple.T0
- Numeric.Semigroup.StrictTuple: instance Data.Data.Data a => Data.Data.Data (Numeric.Semigroup.StrictTuple.T1 a)
- Numeric.Semigroup.StrictTuple: instance Data.Foldable.Foldable (Numeric.Semigroup.StrictTuple.T2 a)
- Numeric.Semigroup.StrictTuple: instance Data.Foldable.Foldable (Numeric.Semigroup.StrictTuple.T3 a b)
- Numeric.Semigroup.StrictTuple: instance Data.Foldable.Foldable (Numeric.Semigroup.StrictTuple.T4 a b c)
- Numeric.Semigroup.StrictTuple: instance Data.Foldable.Foldable (Numeric.Semigroup.StrictTuple.T5 a b c e)
- Numeric.Semigroup.StrictTuple: instance Data.Foldable.Foldable (Numeric.Semigroup.StrictTuple.T6 a b c d e)
- Numeric.Semigroup.StrictTuple: instance Data.Foldable.Foldable (Numeric.Semigroup.StrictTuple.T7 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance Data.Foldable.Foldable (Numeric.Semigroup.StrictTuple.T8 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance Data.Foldable.Foldable (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance Data.Foldable.Foldable Numeric.Semigroup.StrictTuple.T1
- Numeric.Semigroup.StrictTuple: instance Data.Semigroup.Semigroup Numeric.Semigroup.StrictTuple.T0
- Numeric.Semigroup.StrictTuple: instance Data.Semigroup.Semigroup a => Data.Semigroup.Semigroup (Numeric.Semigroup.StrictTuple.T1 a)
- Numeric.Semigroup.StrictTuple: instance Data.Traversable.Traversable (Numeric.Semigroup.StrictTuple.T2 a)
- Numeric.Semigroup.StrictTuple: instance Data.Traversable.Traversable (Numeric.Semigroup.StrictTuple.T3 a b)
- Numeric.Semigroup.StrictTuple: instance Data.Traversable.Traversable (Numeric.Semigroup.StrictTuple.T4 a b c)
- Numeric.Semigroup.StrictTuple: instance Data.Traversable.Traversable (Numeric.Semigroup.StrictTuple.T5 a b c d)
- Numeric.Semigroup.StrictTuple: instance Data.Traversable.Traversable (Numeric.Semigroup.StrictTuple.T6 a b c d e)
- Numeric.Semigroup.StrictTuple: instance Data.Traversable.Traversable (Numeric.Semigroup.StrictTuple.T7 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance Data.Traversable.Traversable (Numeric.Semigroup.StrictTuple.T8 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance Data.Traversable.Traversable (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance Data.Traversable.Traversable Numeric.Semigroup.StrictTuple.T1
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Applicative Numeric.Semigroup.StrictTuple.T1
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Functor (Numeric.Semigroup.StrictTuple.T2 a)
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Functor (Numeric.Semigroup.StrictTuple.T3 a b)
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Functor (Numeric.Semigroup.StrictTuple.T4 a b c)
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Functor (Numeric.Semigroup.StrictTuple.T5 a b c d)
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Functor (Numeric.Semigroup.StrictTuple.T6 a b c d e)
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Functor (Numeric.Semigroup.StrictTuple.T7 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Functor (Numeric.Semigroup.StrictTuple.T8 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Functor (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Functor Numeric.Semigroup.StrictTuple.T1
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Monad Numeric.Semigroup.StrictTuple.T1
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Monoid Numeric.Semigroup.StrictTuple.T0
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Monoid a => GHC.Base.Applicative (Numeric.Semigroup.StrictTuple.T2 a)
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Monoid a => GHC.Base.Monad (Numeric.Semigroup.StrictTuple.T2 a)
- Numeric.Semigroup.StrictTuple: instance GHC.Base.Monoid a => GHC.Base.Monoid (Numeric.Semigroup.StrictTuple.T1 a)
- Numeric.Semigroup.StrictTuple: instance GHC.Classes.Eq Numeric.Semigroup.StrictTuple.T0
- Numeric.Semigroup.StrictTuple: instance GHC.Classes.Eq a => GHC.Classes.Eq (Numeric.Semigroup.StrictTuple.T1 a)
- Numeric.Semigroup.StrictTuple: instance GHC.Classes.Ord Numeric.Semigroup.StrictTuple.T0
- Numeric.Semigroup.StrictTuple: instance GHC.Classes.Ord a => GHC.Classes.Ord (Numeric.Semigroup.StrictTuple.T1 a)
- Numeric.Semigroup.StrictTuple: instance GHC.Enum.Bounded Numeric.Semigroup.StrictTuple.T0
- Numeric.Semigroup.StrictTuple: instance GHC.Enum.Bounded a => GHC.Enum.Bounded (Numeric.Semigroup.StrictTuple.T1 a)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic (Numeric.Semigroup.StrictTuple.T1 a)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic (Numeric.Semigroup.StrictTuple.T2 a b)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic (Numeric.Semigroup.StrictTuple.T3 a b c)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic (Numeric.Semigroup.StrictTuple.T4 a b c d)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic (Numeric.Semigroup.StrictTuple.T5 a b c d e)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic (Numeric.Semigroup.StrictTuple.T6 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic (Numeric.Semigroup.StrictTuple.T7 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic (Numeric.Semigroup.StrictTuple.T8 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h i)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic Numeric.Semigroup.StrictTuple.T0
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic1 (Numeric.Semigroup.StrictTuple.T2 a)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic1 (Numeric.Semigroup.StrictTuple.T3 a b)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic1 (Numeric.Semigroup.StrictTuple.T4 a b c)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic1 (Numeric.Semigroup.StrictTuple.T5 a b c d)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic1 (Numeric.Semigroup.StrictTuple.T6 a b c d e)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic1 (Numeric.Semigroup.StrictTuple.T7 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic1 (Numeric.Semigroup.StrictTuple.T8 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic1 (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance GHC.Generics.Generic1 Numeric.Semigroup.StrictTuple.T1
- Numeric.Semigroup.StrictTuple: instance GHC.Read.Read Numeric.Semigroup.StrictTuple.T0
- Numeric.Semigroup.StrictTuple: instance GHC.Read.Read a => GHC.Read.Read (Numeric.Semigroup.StrictTuple.T1 a)
- Numeric.Semigroup.StrictTuple: instance GHC.Show.Show Numeric.Semigroup.StrictTuple.T0
- Numeric.Semigroup.StrictTuple: instance GHC.Show.Show a => GHC.Show.Show (Numeric.Semigroup.StrictTuple.T1 a)
- Numeric.Semigroup.StrictTuple: instance Numeric.Semigroup.StrictTuple.StrictTuple () Numeric.Semigroup.StrictTuple.T0
- Numeric.Semigroup.StrictTuple: instance Numeric.Semigroup.StrictTuple.StrictTuple (a, b) (Numeric.Semigroup.StrictTuple.T2 a b)
- Numeric.Semigroup.StrictTuple: instance Numeric.Semigroup.StrictTuple.StrictTuple (a, b, c) (Numeric.Semigroup.StrictTuple.T3 a b c)
- Numeric.Semigroup.StrictTuple: instance Numeric.Semigroup.StrictTuple.StrictTuple (a, b, c, d) (Numeric.Semigroup.StrictTuple.T4 a b c d)
- Numeric.Semigroup.StrictTuple: instance Numeric.Semigroup.StrictTuple.StrictTuple (a, b, c, d, e) (Numeric.Semigroup.StrictTuple.T5 a b c d e)
- Numeric.Semigroup.StrictTuple: instance Numeric.Semigroup.StrictTuple.StrictTuple (a, b, c, d, e, f) (Numeric.Semigroup.StrictTuple.T6 a b c d e f)
- Numeric.Semigroup.StrictTuple: instance Numeric.Semigroup.StrictTuple.StrictTuple (a, b, c, d, e, f, g) (Numeric.Semigroup.StrictTuple.T7 a b c d e f g)
- Numeric.Semigroup.StrictTuple: instance Numeric.Semigroup.StrictTuple.StrictTuple (a, b, c, d, e, f, g, h) (Numeric.Semigroup.StrictTuple.T8 a b c d e f g h)
- Numeric.Semigroup.StrictTuple: instance Numeric.Semigroup.StrictTuple.StrictTuple (a, b, c, d, e, f, g, h, i) (Numeric.Semigroup.StrictTuple.T9 a b c d e f g h i)
- Numeric.Semigroup.StrictTuple: newtype T1 a
- Numeric.Semigroup.StrictTuple: strictT0 :: T0
- Numeric.Semigroup.StrictTuple: strictT1 :: a -> T1 a
- Numeric.Semigroup.StrictTuple: strictT2 :: a -> b -> T2 a b
- Numeric.Semigroup.StrictTuple: strictT3 :: a -> b -> c -> T3 a b c
- Numeric.Semigroup.StrictTuple: strictT4 :: a -> b -> c -> d -> T4 a b c d
- Numeric.Semigroup.StrictTuple: strictT5 :: a -> b -> c -> d -> e -> T5 a b c d e
- Numeric.Semigroup.StrictTuple: strictT6 :: a -> b -> c -> d -> e -> f -> T6 a b c d e f
- Numeric.Semigroup.StrictTuple: strictT7 :: a -> b -> c -> d -> e -> f -> g -> T7 a b c d e f g
- Numeric.Semigroup.StrictTuple: strictT8 :: a -> b -> c -> d -> e -> f -> g -> h -> T8 a b c d e f g h
- Numeric.Semigroup.StrictTuple: strictT9 :: a -> b -> c -> d -> e -> f -> g -> h -> i -> T9 a b c d e f g h i
- Numeric.Semigroup.StrictTuple: toStrictTuple :: StrictTuple a b => a -> b
+ Numeric.Tuple: T0 :: T0
+ Numeric.Tuple: T1 :: a -> T1 a
+ Numeric.Tuple: T2 :: a -> b -> T2 a b
+ Numeric.Tuple: T3 :: a -> b -> c -> T3 a b c
+ Numeric.Tuple: T4 :: a -> b -> c -> d -> T4 a b c d
+ Numeric.Tuple: T5 :: a -> b -> c -> d -> e -> T5 a b c d e
+ Numeric.Tuple: T6 :: a -> b -> c -> d -> e -> f -> T6 a b c d e f
+ Numeric.Tuple: T7 :: a -> b -> c -> d -> e -> f -> g -> T7 a b c d e f g
+ Numeric.Tuple: T8 :: a -> b -> c -> d -> e -> f -> g -> h -> T8 a b c d e f g h
+ Numeric.Tuple: T9 :: a -> b -> c -> d -> e -> f -> g -> h -> i -> T9 a b c d e f g h i
+ Numeric.Tuple: class AsTuple a b | a -> b, b -> a
+ Numeric.Tuple: data T0
+ Numeric.Tuple: data T2 a b
+ Numeric.Tuple: data T3 a b c
+ Numeric.Tuple: data T4 a b c d
+ Numeric.Tuple: data T5 a b c d e
+ Numeric.Tuple: data T6 a b c d e f
+ Numeric.Tuple: data T7 a b c d e f g
+ Numeric.Tuple: data T8 a b c d e f g h
+ Numeric.Tuple: data T9 a b c d e f g h i
+ Numeric.Tuple: foldMap' :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
+ Numeric.Tuple: fromTuple :: AsTuple a b => b -> a
+ Numeric.Tuple: instance (Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Tuple.T2 a b)
+ Numeric.Tuple: instance (Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Tuple.T3 a b c)
+ Numeric.Tuple: instance (Data.Data.Data d, Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Tuple.T4 a b c d)
+ Numeric.Tuple: instance (Data.Data.Data e, Data.Data.Data d, Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Tuple.T5 a b c d e)
+ Numeric.Tuple: instance (Data.Data.Data f, Data.Data.Data e, Data.Data.Data d, Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Tuple.T6 a b c d e f)
+ Numeric.Tuple: instance (Data.Data.Data g, Data.Data.Data f, Data.Data.Data e, Data.Data.Data d, Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Tuple.T7 a b c d e f g)
+ Numeric.Tuple: instance (Data.Data.Data h, Data.Data.Data g, Data.Data.Data f, Data.Data.Data e, Data.Data.Data d, Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Tuple.T8 a b c d e f g h)
+ Numeric.Tuple: instance (Data.Data.Data i, Data.Data.Data h, Data.Data.Data g, Data.Data.Data f, Data.Data.Data e, Data.Data.Data d, Data.Data.Data c, Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Numeric.Tuple.T9 a b c d e f g h i)
+ Numeric.Tuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b) => Data.Semigroup.Semigroup (Numeric.Tuple.T2 a b)
+ Numeric.Tuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c) => Data.Semigroup.Semigroup (Numeric.Tuple.T3 a b c)
+ Numeric.Tuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c, Data.Semigroup.Semigroup d) => Data.Semigroup.Semigroup (Numeric.Tuple.T4 a b c d)
+ Numeric.Tuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c, Data.Semigroup.Semigroup d, Data.Semigroup.Semigroup e) => Data.Semigroup.Semigroup (Numeric.Tuple.T5 a b c d e)
+ Numeric.Tuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c, Data.Semigroup.Semigroup d, Data.Semigroup.Semigroup e, Data.Semigroup.Semigroup f) => Data.Semigroup.Semigroup (Numeric.Tuple.T6 a b c d e f)
+ Numeric.Tuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c, Data.Semigroup.Semigroup d, Data.Semigroup.Semigroup e, Data.Semigroup.Semigroup f, Data.Semigroup.Semigroup g) => Data.Semigroup.Semigroup (Numeric.Tuple.T7 a b c d e f g)
+ Numeric.Tuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c, Data.Semigroup.Semigroup d, Data.Semigroup.Semigroup e, Data.Semigroup.Semigroup f, Data.Semigroup.Semigroup g, Data.Semigroup.Semigroup h) => Data.Semigroup.Semigroup (Numeric.Tuple.T8 a b c d e f g h)
+ Numeric.Tuple: instance (Data.Semigroup.Semigroup a, Data.Semigroup.Semigroup b, Data.Semigroup.Semigroup c, Data.Semigroup.Semigroup d, Data.Semigroup.Semigroup e, Data.Semigroup.Semigroup f, Data.Semigroup.Semigroup g, Data.Semigroup.Semigroup h, Data.Semigroup.Semigroup i) => Data.Semigroup.Semigroup (Numeric.Tuple.T9 a b c d e f g h i)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b) => GHC.Base.Applicative (Numeric.Tuple.T3 a b)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b) => GHC.Base.Monad (Numeric.Tuple.T3 a b)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b) => GHC.Base.Monoid (Numeric.Tuple.T2 a b)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c) => GHC.Base.Applicative (Numeric.Tuple.T4 a b c)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c) => GHC.Base.Monad (Numeric.Tuple.T4 a b c)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c) => GHC.Base.Monoid (Numeric.Tuple.T3 a b c)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d) => GHC.Base.Applicative (Numeric.Tuple.T5 a b c d)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d) => GHC.Base.Monad (Numeric.Tuple.T5 a b c d)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d) => GHC.Base.Monoid (Numeric.Tuple.T4 a b c d)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e) => GHC.Base.Applicative (Numeric.Tuple.T6 a b c d e)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e) => GHC.Base.Monad (Numeric.Tuple.T6 a b c d e)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e) => GHC.Base.Monoid (Numeric.Tuple.T5 a b c d e)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f) => GHC.Base.Applicative (Numeric.Tuple.T7 a b c d e f)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f) => GHC.Base.Monad (Numeric.Tuple.T7 a b c d e f)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f) => GHC.Base.Monoid (Numeric.Tuple.T6 a b c d e f)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g) => GHC.Base.Applicative (Numeric.Tuple.T8 a b c d e f g)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g) => GHC.Base.Monad (Numeric.Tuple.T8 a b c d e f g)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g) => GHC.Base.Monoid (Numeric.Tuple.T7 a b c d e f g)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g, GHC.Base.Monoid h) => GHC.Base.Applicative (Numeric.Tuple.T9 a b c d e f g h)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g, GHC.Base.Monoid h) => GHC.Base.Monad (Numeric.Tuple.T9 a b c d e f g h)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g, GHC.Base.Monoid h) => GHC.Base.Monoid (Numeric.Tuple.T8 a b c d e f g h)
+ Numeric.Tuple: instance (GHC.Base.Monoid a, GHC.Base.Monoid b, GHC.Base.Monoid c, GHC.Base.Monoid d, GHC.Base.Monoid e, GHC.Base.Monoid f, GHC.Base.Monoid g, GHC.Base.Monoid h, GHC.Base.Monoid i) => GHC.Base.Monoid (Numeric.Tuple.T9 a b c d e f g h i)
+ Numeric.Tuple: instance (GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Tuple.T2 a b)
+ Numeric.Tuple: instance (GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Tuple.T3 a b c)
+ Numeric.Tuple: instance (GHC.Classes.Eq d, GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Tuple.T4 a b c d)
+ Numeric.Tuple: instance (GHC.Classes.Eq e, GHC.Classes.Eq d, GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Tuple.T5 a b c d e)
+ Numeric.Tuple: instance (GHC.Classes.Eq f, GHC.Classes.Eq e, GHC.Classes.Eq d, GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Tuple.T6 a b c d e f)
+ Numeric.Tuple: instance (GHC.Classes.Eq g, GHC.Classes.Eq f, GHC.Classes.Eq e, GHC.Classes.Eq d, GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Tuple.T7 a b c d e f g)
+ Numeric.Tuple: instance (GHC.Classes.Eq h, GHC.Classes.Eq g, GHC.Classes.Eq f, GHC.Classes.Eq e, GHC.Classes.Eq d, GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Tuple.T8 a b c d e f g h)
+ Numeric.Tuple: instance (GHC.Classes.Eq i, GHC.Classes.Eq h, GHC.Classes.Eq g, GHC.Classes.Eq f, GHC.Classes.Eq e, GHC.Classes.Eq d, GHC.Classes.Eq c, GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.Tuple.T9 a b c d e f g h i)
+ Numeric.Tuple: instance (GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Tuple.T2 a b)
+ Numeric.Tuple: instance (GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Tuple.T3 a b c)
+ Numeric.Tuple: instance (GHC.Classes.Ord d, GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Tuple.T4 a b c d)
+ Numeric.Tuple: instance (GHC.Classes.Ord e, GHC.Classes.Ord d, GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Tuple.T5 a b c d e)
+ Numeric.Tuple: instance (GHC.Classes.Ord f, GHC.Classes.Ord e, GHC.Classes.Ord d, GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Tuple.T6 a b c d e f)
+ Numeric.Tuple: instance (GHC.Classes.Ord g, GHC.Classes.Ord f, GHC.Classes.Ord e, GHC.Classes.Ord d, GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Tuple.T7 a b c d e f g)
+ Numeric.Tuple: instance (GHC.Classes.Ord h, GHC.Classes.Ord g, GHC.Classes.Ord f, GHC.Classes.Ord e, GHC.Classes.Ord d, GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Tuple.T8 a b c d e f g h)
+ Numeric.Tuple: instance (GHC.Classes.Ord i, GHC.Classes.Ord h, GHC.Classes.Ord g, GHC.Classes.Ord f, GHC.Classes.Ord e, GHC.Classes.Ord d, GHC.Classes.Ord c, GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.Tuple.T9 a b c d e f g h i)
+ Numeric.Tuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b) => GHC.Enum.Bounded (Numeric.Tuple.T2 a b)
+ Numeric.Tuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c) => GHC.Enum.Bounded (Numeric.Tuple.T3 a b c)
+ Numeric.Tuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c, GHC.Enum.Bounded d) => GHC.Enum.Bounded (Numeric.Tuple.T4 a b c d)
+ Numeric.Tuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c, GHC.Enum.Bounded d, GHC.Enum.Bounded e) => GHC.Enum.Bounded (Numeric.Tuple.T5 a b c d e)
+ Numeric.Tuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c, GHC.Enum.Bounded d, GHC.Enum.Bounded e, GHC.Enum.Bounded f) => GHC.Enum.Bounded (Numeric.Tuple.T6 a b c d e f)
+ Numeric.Tuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c, GHC.Enum.Bounded d, GHC.Enum.Bounded e, GHC.Enum.Bounded f, GHC.Enum.Bounded g) => GHC.Enum.Bounded (Numeric.Tuple.T7 a b c d e f g)
+ Numeric.Tuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c, GHC.Enum.Bounded d, GHC.Enum.Bounded e, GHC.Enum.Bounded f, GHC.Enum.Bounded g, GHC.Enum.Bounded h) => GHC.Enum.Bounded (Numeric.Tuple.T8 a b c d e f g h)
+ Numeric.Tuple: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, GHC.Enum.Bounded c, GHC.Enum.Bounded d, GHC.Enum.Bounded e, GHC.Enum.Bounded f, GHC.Enum.Bounded g, GHC.Enum.Bounded h, GHC.Enum.Bounded i) => GHC.Enum.Bounded (Numeric.Tuple.T9 a b c d e f g h i)
+ Numeric.Tuple: instance (GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Tuple.T2 a b)
+ Numeric.Tuple: instance (GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Tuple.T3 a b c)
+ Numeric.Tuple: instance (GHC.Read.Read d, GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Tuple.T4 a b c d)
+ Numeric.Tuple: instance (GHC.Read.Read e, GHC.Read.Read d, GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Tuple.T5 a b c d e)
+ Numeric.Tuple: instance (GHC.Read.Read f, GHC.Read.Read e, GHC.Read.Read d, GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Tuple.T6 a b c d e f)
+ Numeric.Tuple: instance (GHC.Read.Read g, GHC.Read.Read f, GHC.Read.Read e, GHC.Read.Read d, GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Tuple.T7 a b c d e f g)
+ Numeric.Tuple: instance (GHC.Read.Read h, GHC.Read.Read g, GHC.Read.Read f, GHC.Read.Read e, GHC.Read.Read d, GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Tuple.T8 a b c d e f g h)
+ Numeric.Tuple: instance (GHC.Read.Read i, GHC.Read.Read h, GHC.Read.Read g, GHC.Read.Read f, GHC.Read.Read e, GHC.Read.Read d, GHC.Read.Read c, GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Numeric.Tuple.T9 a b c d e f g h i)
+ Numeric.Tuple: instance (GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Tuple.T2 a b)
+ Numeric.Tuple: instance (GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Tuple.T3 a b c)
+ Numeric.Tuple: instance (GHC.Show.Show d, GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Tuple.T4 a b c d)
+ Numeric.Tuple: instance (GHC.Show.Show e, GHC.Show.Show d, GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Tuple.T5 a b c d e)
+ Numeric.Tuple: instance (GHC.Show.Show f, GHC.Show.Show e, GHC.Show.Show d, GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Tuple.T6 a b c d e f)
+ Numeric.Tuple: instance (GHC.Show.Show g, GHC.Show.Show f, GHC.Show.Show e, GHC.Show.Show d, GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Tuple.T7 a b c d e f g)
+ Numeric.Tuple: instance (GHC.Show.Show h, GHC.Show.Show g, GHC.Show.Show f, GHC.Show.Show e, GHC.Show.Show d, GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Tuple.T8 a b c d e f g h)
+ Numeric.Tuple: instance (GHC.Show.Show i, GHC.Show.Show h, GHC.Show.Show g, GHC.Show.Show f, GHC.Show.Show e, GHC.Show.Show d, GHC.Show.Show c, GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Numeric.Tuple.T9 a b c d e f g h i)
+ Numeric.Tuple: instance Data.Bifunctor.Bifunctor (Numeric.Tuple.T3 a)
+ Numeric.Tuple: instance Data.Bifunctor.Bifunctor (Numeric.Tuple.T4 a b)
+ Numeric.Tuple: instance Data.Bifunctor.Bifunctor (Numeric.Tuple.T5 a b c)
+ Numeric.Tuple: instance Data.Bifunctor.Bifunctor (Numeric.Tuple.T6 a b c d)
+ Numeric.Tuple: instance Data.Bifunctor.Bifunctor (Numeric.Tuple.T7 a b c d e)
+ Numeric.Tuple: instance Data.Bifunctor.Bifunctor (Numeric.Tuple.T8 a b c d e f)
+ Numeric.Tuple: instance Data.Bifunctor.Bifunctor (Numeric.Tuple.T9 a b c d e f g)
+ Numeric.Tuple: instance Data.Bifunctor.Bifunctor Numeric.Tuple.T2
+ Numeric.Tuple: instance Data.Data.Data Numeric.Tuple.T0
+ Numeric.Tuple: instance Data.Data.Data a => Data.Data.Data (Numeric.Tuple.T1 a)
+ Numeric.Tuple: instance Data.Foldable.Foldable (Numeric.Tuple.T2 a)
+ Numeric.Tuple: instance Data.Foldable.Foldable (Numeric.Tuple.T3 a b)
+ Numeric.Tuple: instance Data.Foldable.Foldable (Numeric.Tuple.T4 a b c)
+ Numeric.Tuple: instance Data.Foldable.Foldable (Numeric.Tuple.T5 a b c e)
+ Numeric.Tuple: instance Data.Foldable.Foldable (Numeric.Tuple.T6 a b c d e)
+ Numeric.Tuple: instance Data.Foldable.Foldable (Numeric.Tuple.T7 a b c d e f)
+ Numeric.Tuple: instance Data.Foldable.Foldable (Numeric.Tuple.T8 a b c d e f g)
+ Numeric.Tuple: instance Data.Foldable.Foldable (Numeric.Tuple.T9 a b c d e f g h)
+ Numeric.Tuple: instance Data.Foldable.Foldable Numeric.Tuple.T1
+ Numeric.Tuple: instance Data.Semigroup.Semigroup Numeric.Tuple.T0
+ Numeric.Tuple: instance Data.Semigroup.Semigroup a => Data.Semigroup.Semigroup (Numeric.Tuple.T1 a)
+ Numeric.Tuple: instance Data.Traversable.Traversable (Numeric.Tuple.T2 a)
+ Numeric.Tuple: instance Data.Traversable.Traversable (Numeric.Tuple.T3 a b)
+ Numeric.Tuple: instance Data.Traversable.Traversable (Numeric.Tuple.T4 a b c)
+ Numeric.Tuple: instance Data.Traversable.Traversable (Numeric.Tuple.T5 a b c d)
+ Numeric.Tuple: instance Data.Traversable.Traversable (Numeric.Tuple.T6 a b c d e)
+ Numeric.Tuple: instance Data.Traversable.Traversable (Numeric.Tuple.T7 a b c d e f)
+ Numeric.Tuple: instance Data.Traversable.Traversable (Numeric.Tuple.T8 a b c d e f g)
+ Numeric.Tuple: instance Data.Traversable.Traversable (Numeric.Tuple.T9 a b c d e f g h)
+ Numeric.Tuple: instance Data.Traversable.Traversable Numeric.Tuple.T1
+ Numeric.Tuple: instance GHC.Base.Applicative Numeric.Tuple.T1
+ Numeric.Tuple: instance GHC.Base.Functor (Numeric.Tuple.T2 a)
+ Numeric.Tuple: instance GHC.Base.Functor (Numeric.Tuple.T3 a b)
+ Numeric.Tuple: instance GHC.Base.Functor (Numeric.Tuple.T4 a b c)
+ Numeric.Tuple: instance GHC.Base.Functor (Numeric.Tuple.T5 a b c d)
+ Numeric.Tuple: instance GHC.Base.Functor (Numeric.Tuple.T6 a b c d e)
+ Numeric.Tuple: instance GHC.Base.Functor (Numeric.Tuple.T7 a b c d e f)
+ Numeric.Tuple: instance GHC.Base.Functor (Numeric.Tuple.T8 a b c d e f g)
+ Numeric.Tuple: instance GHC.Base.Functor (Numeric.Tuple.T9 a b c d e f g h)
+ Numeric.Tuple: instance GHC.Base.Functor Numeric.Tuple.T1
+ Numeric.Tuple: instance GHC.Base.Monad Numeric.Tuple.T1
+ Numeric.Tuple: instance GHC.Base.Monoid Numeric.Tuple.T0
+ Numeric.Tuple: instance GHC.Base.Monoid a => GHC.Base.Applicative (Numeric.Tuple.T2 a)
+ Numeric.Tuple: instance GHC.Base.Monoid a => GHC.Base.Monad (Numeric.Tuple.T2 a)
+ Numeric.Tuple: instance GHC.Base.Monoid a => GHC.Base.Monoid (Numeric.Tuple.T1 a)
+ Numeric.Tuple: instance GHC.Classes.Eq Numeric.Tuple.T0
+ Numeric.Tuple: instance GHC.Classes.Eq a => GHC.Classes.Eq (Numeric.Tuple.T1 a)
+ Numeric.Tuple: instance GHC.Classes.Ord Numeric.Tuple.T0
+ Numeric.Tuple: instance GHC.Classes.Ord a => GHC.Classes.Ord (Numeric.Tuple.T1 a)
+ Numeric.Tuple: instance GHC.Enum.Bounded Numeric.Tuple.T0
+ Numeric.Tuple: instance GHC.Enum.Bounded a => GHC.Enum.Bounded (Numeric.Tuple.T1 a)
+ Numeric.Tuple: instance GHC.Generics.Generic (Numeric.Tuple.T1 a)
+ Numeric.Tuple: instance GHC.Generics.Generic (Numeric.Tuple.T2 a b)
+ Numeric.Tuple: instance GHC.Generics.Generic (Numeric.Tuple.T3 a b c)
+ Numeric.Tuple: instance GHC.Generics.Generic (Numeric.Tuple.T4 a b c d)
+ Numeric.Tuple: instance GHC.Generics.Generic (Numeric.Tuple.T5 a b c d e)
+ Numeric.Tuple: instance GHC.Generics.Generic (Numeric.Tuple.T6 a b c d e f)
+ Numeric.Tuple: instance GHC.Generics.Generic (Numeric.Tuple.T7 a b c d e f g)
+ Numeric.Tuple: instance GHC.Generics.Generic (Numeric.Tuple.T8 a b c d e f g h)
+ Numeric.Tuple: instance GHC.Generics.Generic (Numeric.Tuple.T9 a b c d e f g h i)
+ Numeric.Tuple: instance GHC.Generics.Generic Numeric.Tuple.T0
+ Numeric.Tuple: instance GHC.Generics.Generic1 (Numeric.Tuple.T2 a)
+ Numeric.Tuple: instance GHC.Generics.Generic1 (Numeric.Tuple.T3 a b)
+ Numeric.Tuple: instance GHC.Generics.Generic1 (Numeric.Tuple.T4 a b c)
+ Numeric.Tuple: instance GHC.Generics.Generic1 (Numeric.Tuple.T5 a b c d)
+ Numeric.Tuple: instance GHC.Generics.Generic1 (Numeric.Tuple.T6 a b c d e)
+ Numeric.Tuple: instance GHC.Generics.Generic1 (Numeric.Tuple.T7 a b c d e f)
+ Numeric.Tuple: instance GHC.Generics.Generic1 (Numeric.Tuple.T8 a b c d e f g)
+ Numeric.Tuple: instance GHC.Generics.Generic1 (Numeric.Tuple.T9 a b c d e f g h)
+ Numeric.Tuple: instance GHC.Generics.Generic1 Numeric.Tuple.T1
+ Numeric.Tuple: instance GHC.Read.Read Numeric.Tuple.T0
+ Numeric.Tuple: instance GHC.Read.Read a => GHC.Read.Read (Numeric.Tuple.T1 a)
+ Numeric.Tuple: instance GHC.Show.Show Numeric.Tuple.T0
+ Numeric.Tuple: instance GHC.Show.Show a => GHC.Show.Show (Numeric.Tuple.T1 a)
+ Numeric.Tuple: instance Numeric.Tuple.AsTuple () Numeric.Tuple.T0
+ Numeric.Tuple: instance Numeric.Tuple.AsTuple (a, b) (Numeric.Tuple.T2 a b)
+ Numeric.Tuple: instance Numeric.Tuple.AsTuple (a, b, c) (Numeric.Tuple.T3 a b c)
+ Numeric.Tuple: instance Numeric.Tuple.AsTuple (a, b, c, d) (Numeric.Tuple.T4 a b c d)
+ Numeric.Tuple: instance Numeric.Tuple.AsTuple (a, b, c, d, e) (Numeric.Tuple.T5 a b c d e)
+ Numeric.Tuple: instance Numeric.Tuple.AsTuple (a, b, c, d, e, f) (Numeric.Tuple.T6 a b c d e f)
+ Numeric.Tuple: instance Numeric.Tuple.AsTuple (a, b, c, d, e, f, g) (Numeric.Tuple.T7 a b c d e f g)
+ Numeric.Tuple: instance Numeric.Tuple.AsTuple (a, b, c, d, e, f, g, h) (Numeric.Tuple.T8 a b c d e f g h)
+ Numeric.Tuple: instance Numeric.Tuple.AsTuple (a, b, c, d, e, f, g, h, i) (Numeric.Tuple.T9 a b c d e f g h i)
+ Numeric.Tuple: newtype T1 a
+ Numeric.Tuple: toTuple :: AsTuple a b => a -> b

Files

+ bench/tuple.hs view
@@ -0,0 +1,57 @@+module Main (main) where++import Data.Time.Clock+import Numeric.Semigroup+import Numeric.Tuple+++main :: IO ()+main = do+    let n = 10000000 :: Int+        one = 1 :: Int+    bench "MaxTup0Fold" $+      fromTuple $ foldMap' (const T0) [1..n]+    bench "MaxFold" $+      foldMap' Max [1..n]+    bench "MaxTupFold" $+      foldMap' (T1 <$> Max) [1..n]+    bench "MaxSumFold" $+      fromTuple $ foldMap' (T2 <$> Max <*> Sum) [1..n]+    bench "MaxSumMinFold" $+      fromTuple $ foldMap' (T3 <$> Max <*> Sum <*> Min) [1..n]+    bench "MaxSumMinMinMaxFold" $+      fromTuple $ foldMap' (T4 <$> Max <*> Sum <*> Min <*> minMax) [1..n]+    bench "MaxSumMinMinMaxAllFold" $+      fromTuple $ foldMap' (T5 <$> Max+                               <*> Sum . (`mod` 19)+                               <*> Min . (`mod` 23)+                               <*> minMax+                               <*> (All . (>0))+                            ) [1..n]+    bench "MaxSumMinMinMaxAllCountFold" $+      fromTuple $ foldMap' (T6 <$> Max+                               <*> Sum . (`mod` 19)+                               <*> Min . (`mod` 23)+                               <*> minMax+                               <*> (All . (>0))+                               <*> (Sum . const one)+                            ) [1..n]+    bench "MaxSumMinMinMaxAllCountProdFold" $+      fromTuple $ foldMap' (T7 <$> Max+                               <*> Sum . (`mod` 19)+                               <*> Min . (`mod` 23)+                               <*> minMax+                               <*> (All . (>0))+                               <*> (Sum . const one)+                               <*> Product . (+1) . (*(-2)) . (`mod` 2)+                            ) [1..n]+++++bench :: Show a => String -> a -> IO ()+bench bname v = do+    t0 <- getCurrentTime+    t1 <- t0 `seq` v `seq` putStrLn ("Evaluated " <> bname <> ":") >> print v >> getCurrentTime+    seq t1 putStrLn $ "Execution time: " <> show (diffUTCTime t1 t0)+    putStrLn ""
easytensor.cabal view
@@ -1,5 +1,5 @@ name: easytensor-version: 0.3.2.0+version: 0.4.0.0 cabal-version: >=1.20 build-type: Simple license: BSD3@@ -44,7 +44,7 @@         Numeric.Scalar         Numeric.Quaternion         Numeric.Semigroup-        Numeric.Semigroup.StrictTuple+        Numeric.Tuple     build-depends:         base >=4.9 && <5,         ghc-prim >=0.5,@@ -142,6 +142,19 @@      type: exitcode-stdio-1.0     main-is: subspacefolds.hs+    build-depends:+        base -any,+        easytensor -any,+        dimensions -any,+        time -any+    default-language: Haskell2010+    hs-source-dirs: bench+    ghc-options: -Wall -fwarn-tabs -O2++benchmark et-tuple++    type: exitcode-stdio-1.0+    main-is: tuple.hs     build-depends:         base -any,         easytensor -any,
− src/Numeric/Semigroup/StrictTuple.hs
@@ -1,578 +0,0 @@-{-# LANGUAGE BangPatterns           #-}-{-# LANGUAGE DeriveDataTypeable     #-}-{-# LANGUAGE DeriveGeneric          #-}-{-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE MultiParamTypeClasses  #-}-{-# LANGUAGE ScopedTypeVariables    #-}--------------------------------------------------------------------------------- |--- Module      :  Numeric.Semigroup.StrictTuple--- Copyright   :  (c) Artem Chirkin--- License     :  BSD3------ Maintainer  :  chirkin@arch.ethz.ch------ This module defines a set of tuple data types to substitute normal lazy tuples.--- The reason is that @Monoid@ instances of normal tuples are lazy,--- which makes folds with arithmetic operations leak memory.--- @Semigroup@ and @Monoid@ instances of these tuples are strict in all their arguments.------ Using tuple types defined here together with @Numeric.Semigroup.foldMap'@,--- one can combine multiple monoidal fold structures in a single pass over foldable container:------ >> foldMap' (T3 <$> Max <*> Sum <*> minMax) $ take 100000000 ([1..] :: [Int])------ The example above runs in constant space, which would not happen with normal---  GHC tuples due to strictness properties of their `mappend` implementations---  (tuple arguments are not enforced).-------------------------------------------------------------------------------module Numeric.Semigroup.StrictTuple-    ( T0 (..), T1 (..), T2 (..), T3 (..), T4 (..)-    , T5 (..), T6 (..), T7 (..), T8 (..), T9 (..)-    , StrictTuple (..)-    , strictT0, strictT1, strictT2, strictT3, strictT4-    , strictT5, strictT6, strictT7, strictT8, strictT9-    ) where--import           Data.Bifunctor-import           Data.Coerce       (coerce)-import           Data.Data-import           GHC.Generics-import           Numeric.Semigroup--data T0 = T0-  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic)-newtype T1 a = T1 a-  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)-data T2 a b = T2 a b-  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)-data T3 a b c = T3 a b c-  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)-data T4 a b c d = T4 a b c d-  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)-data T5 a b c d e = T5 a b c d e-  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)-data T6 a b c d e f = T6 a b c d e f-  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)-data T7 a b c d e f g = T7 a b c d e f g-  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)-data T8 a b c d e f g h = T8 a b c d e f g h-  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)-data T9 a b c d e f g h i = T9 a b c d e f g h i-  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)--strictT0 :: T0-strictT0 = T0-strictT1 :: a -> T1 a-strictT1 !a = T1 a-strictT2 :: a -> b -> T2 a b-strictT2 !a !b = T2 a b-strictT3 :: a -> b -> c -> T3 a b c-strictT3 !a !b !c = T3 a b c-strictT4 :: a -> b -> c -> d -> T4 a b c d-strictT4 !a !b !c !d = T4 a b c d-strictT5 :: a -> b -> c -> d -> e -> T5 a b c d e-strictT5 !a !b !c !d !e = T5 a b c d e-strictT6 :: a -> b -> c -> d -> e -> f -> T6 a b c d e f-strictT6 !a !b !c !d !e !f = T6 a b c d e f-strictT7 :: a -> b -> c -> d -> e -> f -> g -> T7 a b c d e f g-strictT7 !a !b !c !d !e !f !g = T7 a b c d e f g-strictT8 :: a -> b -> c -> d -> e -> f -> g -> h -> T8 a b c d e f g h-strictT8 !a !b !c !d !e !f !g !h = T8 a b c d e f g h-strictT9 :: a -> b -> c -> d -> e -> f -> g -> h -> i -> T9 a b c d e f g h i-strictT9 !a !b !c !d !e !f !g !h !i = T9 a b c d e f g h i--instance Semigroup T0 where-    _ <> _ = T0-instance Semigroup a => Semigroup (T1 a) where-    (<>) = coerce ((<>) :: a -> a -> a)-instance ( Semigroup a-         , Semigroup b-         ) => Semigroup (T2 a b) where-    (T2 !ax !bx) <> (T2 !ay !by) = strictT2 (ax <> ay) (bx <> by)-instance ( Semigroup a-         , Semigroup b-         , Semigroup c-         ) => Semigroup (T3 a b c) where-    (T3 !ax !bx !cx) <> (T3 !ay !by !cy)-      = strictT3 (ax <> ay) (bx <> by) (cx <> cy)-instance ( Semigroup a-         , Semigroup b-         , Semigroup c-         , Semigroup d-         ) => Semigroup (T4 a b c d) where-    (T4 !ax !bx !cx !dx) <> (T4 !ay !by !cy !dy)-      = strictT4 (ax <> ay) (bx <> by) (cx <> cy) (dx <> dy)-instance ( Semigroup a-         , Semigroup b-         , Semigroup c-         , Semigroup d-         , Semigroup e-         ) => Semigroup (T5 a b c d e) where-    (T5 !ax !bx !cx !dx !ex) <> (T5 !ay !by !cy !dy !ey)-      = strictT5 (ax <> ay) (bx <> by) (cx <> cy) (dx <> dy) (ex <> ey)-instance ( Semigroup a-         , Semigroup b-         , Semigroup c-         , Semigroup d-         , Semigroup e-         , Semigroup f-         ) => Semigroup (T6 a b c d e f) where-    (T6 !ax !bx !cx !dx !ex !fx) <> (T6 !ay !by !cy !dy !ey !fy)-      = strictT6 (ax <> ay) (bx <> by) (cx <> cy) (dx <> dy) (ex <> ey) (fx <> fy)-instance ( Semigroup a-         , Semigroup b-         , Semigroup c-         , Semigroup d-         , Semigroup e-         , Semigroup f-         , Semigroup g-         ) => Semigroup (T7 a b c d e f g) where-    (T7 !ax !bx !cx !dx !ex !fx !gx) <> (T7 !ay !by !cy !dy !ey !fy !gy)-      = strictT7 (ax <> ay) (bx <> by) (cx <> cy) (dx <> dy) (ex <> ey)-           (fx <> fy) (gx <> gy)-instance ( Semigroup a-         , Semigroup b-         , Semigroup c-         , Semigroup d-         , Semigroup e-         , Semigroup f-         , Semigroup g-         , Semigroup h-         ) => Semigroup (T8 a b c d e f g h) where-    (T8 !ax !bx !cx !dx !ex !fx !gx !hx) <> (T8 !ay !by !cy !dy !ey !fy !gy !hy)-      = strictT8 (ax <> ay) (bx <> by) (cx <> cy) (dx <> dy) (ex <> ey)-           (fx <> fy) (gx <> gy) (hx <> hy)-instance ( Semigroup a-         , Semigroup b-         , Semigroup c-         , Semigroup d-         , Semigroup e-         , Semigroup f-         , Semigroup g-         , Semigroup h-         , Semigroup i-         ) => Semigroup (T9 a b c d e f g h i) where-    (T9 !ax !bx !cx !dx !ex !fx !gx !hx !ix) <> (T9 !ay !by !cy !dy !ey !fy !gy !hy !iy)-      = strictT9 (ax <> ay) (bx <> by) (cx <> cy) (dx <> dy) (ex <> ey)-           (fx <> fy) (gx <> gy) (hx <> hy) (ix <> iy)----instance Monoid T0 where-    mempty = strictT0-    mappend T0 T0 = strictT0-instance Monoid a => Monoid (T1 a) where-    mempty = strictT1 mempty-    mappend = coerce (mappend :: a -> a -> a)-instance ( Monoid a-         , Monoid b-         ) => Monoid (T2 a b) where-    mempty = strictT2 mempty mempty-    mappend (T2 !ax !bx) (T2 !ay !by) = strictT2 (mappend ax ay) (mappend bx by)-instance ( Monoid a-         , Monoid b-         , Monoid c-         ) => Monoid (T3 a b c) where-    mempty = strictT3 mempty mempty mempty-    mappend (T3 !ax !bx !cx) (T3 !ay !by !cy)-      = strictT3 (mappend ax ay) (mappend bx by) (mappend cx cy)-instance ( Monoid a-         , Monoid b-         , Monoid c-         , Monoid d-         ) => Monoid (T4 a b c d) where-    mempty = strictT4 mempty mempty mempty mempty-    mappend (T4 !ax !bx !cx !dx) (T4 !ay !by !cy !dy)-      = strictT4 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy)-instance ( Monoid a-         , Monoid b-         , Monoid c-         , Monoid d-         , Monoid e-         ) => Monoid (T5 a b c d e) where-    mempty = strictT5 mempty mempty mempty mempty mempty-    mappend (T5 !ax !bx !cx !dx !ex) (T5 !ay !by !cy !dy !ey)-      = strictT5 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey)-instance ( Monoid a-         , Monoid b-         , Monoid c-         , Monoid d-         , Monoid e-         , Monoid f-         ) => Monoid (T6 a b c d e f) where-    mempty = strictT6 mempty mempty mempty mempty mempty mempty-    mappend (T6 !ax !bx !cx !dx !ex !fx) (T6 !ay !by !cy !dy !ey !fy)-      = strictT6 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey) (mappend fx fy)-instance ( Monoid a-         , Monoid b-         , Monoid c-         , Monoid d-         , Monoid e-         , Monoid f-         , Monoid g-         ) => Monoid (T7 a b c d e f g) where-    mempty = strictT7 mempty mempty mempty mempty mempty mempty mempty-    mappend (T7 !ax !bx !cx !dx !ex !fx !gx) (T7 !ay !by !cy !dy !ey !fy !gy)-      = strictT7 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey)-           (mappend fx fy) (mappend gx gy)-instance ( Monoid a-         , Monoid b-         , Monoid c-         , Monoid d-         , Monoid e-         , Monoid f-         , Monoid g-         , Monoid h-         ) => Monoid (T8 a b c d e f g h) where-    mempty = strictT8 mempty mempty mempty mempty mempty mempty mempty mempty-    mappend (T8 !ax !bx !cx !dx !ex !fx !gx !hx) (T8 !ay !by !cy !dy !ey !fy !gy !hy)-      = strictT8 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey)-           (mappend fx fy) (mappend gx gy) (mappend hx hy)-instance ( Monoid a-         , Monoid b-         , Monoid c-         , Monoid d-         , Monoid e-         , Monoid f-         , Monoid g-         , Monoid h-         , Monoid i-         ) => Monoid (T9 a b c d e f g h i) where-    mempty = strictT9 mempty mempty mempty mempty mempty mempty mempty mempty mempty-    mappend (T9 !ax !bx !cx !dx !ex !fx !gx !hx !ix) (T9 !ay !by !cy !dy !ey !fy !gy !hy !iy)-      = strictT9 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey)-           (mappend fx fy) (mappend gx gy) (mappend hx hy) (mappend ix iy)---instance Functor T1 where-    fmap = coerce-instance Functor (T2 a) where-    fmap fun ~(T2 a b) = T2 a (fun b)-instance Functor (T3 a b) where-    fmap fun ~(T3 a b c) = T3 a b (fun c)-instance Functor (T4 a b c) where-    fmap fun ~(T4 a b c d) = T4 a b c (fun d)-instance Functor (T5 a b c d) where-    fmap fun ~(T5 a b c d e) = T5 a b c d (fun e)-instance Functor (T6 a b c d e) where-    fmap fun ~(T6 a b c d e f) = T6 a b c d e (fun f)-instance Functor (T7 a b c d e f) where-    fmap fun ~(T7 a b c d e f g) = T7 a b c d e f (fun g)-instance Functor (T8 a b c d e f g) where-    fmap fun ~(T8 a b c d e f g h) = T8 a b c d e f g (fun h)-instance Functor (T9 a b c d e f g h) where-    fmap fun ~(T9 a b c d e f g h i) = T9 a b c d e f g h (fun i)--instance Applicative T1 where-    pure = T1-    (<*>) = coerce-instance ( Monoid a-         ) => Applicative (T2 a) where-    pure = T2 mempty-    (T2 !ax fun) <*> (T2 !ay val)-      = ($ fun val)-     <$> strictT2 (mappend ax ay) id-instance ( Monoid a-         , Monoid b-         ) => Applicative (T3 a b) where-    pure = T3 mempty mempty-    (T3 !ax !bx fun) <*> (T3 !ay !by val)-      = ($ fun val)-     <$> strictT3 (mappend ax ay) (mappend bx by) id-instance ( Monoid a-         , Monoid b-         , Monoid c-         ) => Applicative (T4 a b c) where-    pure = T4 mempty mempty mempty-    (T4 !ax !bx !cx fun) <*> (T4 !ay !by !cy val)-      = ($ fun val)-     <$> strictT4 (mappend ax ay) (mappend bx by) (mappend cx cy) id-instance ( Monoid a-         , Monoid b-         , Monoid c-         , Monoid d-         ) => Applicative (T5 a b c d) where-    pure = T5 mempty mempty mempty mempty-    (T5 !ax !bx !cx !dx fun) <*> (T5 !ay !by !cy !dy val)-      = ($ fun val)-     <$> strictT5 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) id-instance ( Monoid a-         , Monoid b-         , Monoid c-         , Monoid d-         , Monoid e-         ) => Applicative (T6 a b c d e) where-    pure = T6 mempty mempty mempty mempty mempty-    (T6 !ax !bx !cx !dx !ex fun) <*> (T6 !ay !by !cy !dy !ey val)-      = ($ fun val)-     <$> strictT6 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey) id-instance ( Monoid a-         , Monoid b-         , Monoid c-         , Monoid d-         , Monoid e-         , Monoid f-         ) => Applicative (T7 a b c d e f) where-    pure = T7 mempty mempty mempty mempty mempty mempty-    (T7 !ax !bx !cx !dx !ex !fx fun) <*> (T7 !ay !by !cy !dy !ey !fy val)-      = ($ fun val)-     <$> strictT7 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey)-                  (mappend fx fy) id-instance ( Monoid a-         , Monoid b-         , Monoid c-         , Monoid d-         , Monoid e-         , Monoid f-         , Monoid g-         ) => Applicative (T8 a b c d e f g) where-    pure = T8 mempty mempty mempty mempty mempty mempty mempty-    (T8 !ax !bx !cx !dx !ex !fx !gx fun) <*> (T8 !ay !by !cy !dy !ey !fy !gy val)-      = ($ fun val)-     <$> strictT8 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey)-                  (mappend fx fy) (mappend gx gy) id-instance ( Monoid a-         , Monoid b-         , Monoid c-         , Monoid d-         , Monoid e-         , Monoid f-         , Monoid g-         , Monoid h-         ) => Applicative (T9 a b c d e f g h) where-    pure = T9 mempty mempty mempty mempty mempty mempty mempty mempty-    (T9 !ax !bx !cx !dx !ex !fx !gx !hx fun) <*> (T9 !ay !by !cy !dy !ey !fy !gy !hy val)-      = ($ fun val)-     <$> strictT9 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey)-                  (mappend fx fy) (mappend gx gy) (mappend hx hy) id----instance Monad T1 where-    m >>= k = k (coerce m)-instance ( Monoid a-         ) => Monad (T2 a) where-    (T2 !ax x) >>= k = case k x of-      (T2 !ay val) -> ($ val) <$>-         strictT2 (mappend ax ay) id-instance ( Monoid a, Monoid b-         ) => Monad (T3 a b) where-    (T3 !ax !bx x) >>= k = case k x of-      (T3 !ay !by val) -> ($ val) <$>-         strictT3 (mappend ax ay) (mappend bx by) id-instance ( Monoid a, Monoid b, Monoid c-         ) => Monad (T4 a b c) where-    (T4 !ax !bx !cx x) >>= k = case k x of-      (T4 !ay !by !cy val) -> ($ val) <$>-         strictT4 (mappend ax ay) (mappend bx by) (mappend cx cy) id-instance ( Monoid a, Monoid b, Monoid c, Monoid d-         ) => Monad (T5 a b c d) where-    (T5 !ax !bx !cx !dx x) >>= k = case k x of-      (T5 !ay !by !cy !dy val) -> ($ val) <$>-         strictT5 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) id-instance ( Monoid a, Monoid b, Monoid c, Monoid d-         , Monoid e-         ) => Monad (T6 a b c d e) where-    (T6 !ax !bx !cx !dx !ex x) >>= k = case k x of-      (T6 !ay !by !cy !dy !ey val) -> ($ val) <$>-         strictT6 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey) id-instance ( Monoid a, Monoid b, Monoid c, Monoid d-         , Monoid e, Monoid f-         ) => Monad (T7 a b c d e f) where-    (T7 !ax !bx !cx !dx !ex !fx x) >>= k = case k x of-      (T7 !ay !by !cy !dy !ey !fy val) -> ($ val) <$>-         strictT7 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey)-                  (mappend fx fy) id-instance ( Monoid a, Monoid b, Monoid c, Monoid d-         , Monoid e, Monoid f, Monoid g-         ) => Monad (T8 a b c d e f g) where-    (T8 !ax !bx !cx !dx !ex !fx !gx x) >>= k = case k x of-      (T8 !ay !by !cy !dy !ey !fy !gy val) -> ($ val) <$>-         strictT8 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey)-                  (mappend fx fy) (mappend gx gy) id-instance ( Monoid a, Monoid b, Monoid c, Monoid d-         , Monoid e, Monoid f, Monoid g, Monoid h-         ) => Monad (T9 a b c d e f g h) where-    (T9 !ax !bx !cx !dx !ex !fx !gx !hx x) >>= k = case k x of-      (T9 !ay !by !cy !dy !ey !fy !gy !hy val) -> ($ val) <$>-         strictT9 (mappend ax ay) (mappend bx by) (mappend cx cy) (mappend dx dy) (mappend ex ey)-                  (mappend fx fy) (mappend gx gy) (mappend hx hy) id--instance Bounded T0 where-    minBound = T0-    maxBound = T0-instance ( Bounded a-         ) => Bounded (T1 a) where-    minBound = strictT1 minBound-    maxBound = strictT1 maxBound-instance ( Bounded a, Bounded b-         ) => Bounded (T2 a b) where-    minBound = strictT2 minBound minBound-    maxBound = strictT2 maxBound maxBound-instance ( Bounded a, Bounded b, Bounded c-         ) => Bounded (T3 a b c) where-    minBound = strictT3 minBound minBound minBound-    maxBound = strictT3 maxBound maxBound maxBound-instance ( Bounded a, Bounded b, Bounded c, Bounded d-         ) => Bounded (T4 a b c d) where-    minBound = strictT4 minBound minBound minBound minBound-    maxBound = strictT4 maxBound maxBound maxBound maxBound-instance ( Bounded a, Bounded b, Bounded c, Bounded d-         , Bounded e-         ) => Bounded (T5 a b c d e) where-    minBound = strictT5 minBound minBound minBound minBound minBound-    maxBound = strictT5 maxBound maxBound maxBound maxBound maxBound-instance ( Bounded a, Bounded b, Bounded c, Bounded d-         , Bounded e, Bounded f-         ) => Bounded (T6 a b c d e f) where-    minBound = strictT6 minBound minBound minBound minBound minBound minBound-    maxBound = strictT6 maxBound maxBound maxBound maxBound maxBound maxBound-instance ( Bounded a, Bounded b, Bounded c, Bounded d-         , Bounded e, Bounded f, Bounded g-         ) => Bounded (T7 a b c d e f g) where-    minBound = strictT7 minBound minBound minBound minBound minBound minBound minBound-    maxBound = strictT7 maxBound maxBound maxBound maxBound maxBound maxBound maxBound-instance ( Bounded a, Bounded b, Bounded c, Bounded d-         , Bounded e, Bounded f, Bounded g, Bounded h-         ) => Bounded (T8 a b c d e f g h) where-    minBound = strictT8 minBound minBound minBound minBound minBound minBound minBound minBound-    maxBound = strictT8 maxBound maxBound maxBound maxBound maxBound maxBound maxBound maxBound-instance ( Bounded a, Bounded b, Bounded c, Bounded d-         , Bounded e, Bounded f, Bounded g, Bounded h, Bounded i-         ) => Bounded (T9 a b c d e f g h i) where-    minBound = strictT9 minBound minBound minBound minBound minBound minBound minBound minBound minBound-    maxBound = strictT9 maxBound maxBound maxBound maxBound maxBound maxBound maxBound maxBound maxBound--instance Foldable T1 where-    foldMap = coerce-    foldr f z y = f (coerce y) z-instance Foldable (T2 a) where-    foldMap f ~(T2 _ x) = f x-    foldr f z ~(T2 _ x) = f x z-    length _ = 1-    null _ = False-instance Foldable (T3 a b) where-    foldMap f ~(T3 _ _ x) = f x-    foldr f z ~(T3 _ _ x) = f x z-    length _ = 1-    null _ = False-instance Foldable (T4 a b c) where-    foldMap f ~(T4 _ _ _ x) = f x-    foldr f z ~(T4 _ _ _ x) = f x z-    length _ = 1-    null _ = False-instance Foldable (T5 a b c e) where-    foldMap f ~(T5 _ _ _ _ x) = f x-    foldr f z ~(T5 _ _ _ _ x) = f x z-    length _ = 1-    null _ = False-instance Foldable (T6 a b c d e) where-    foldMap f ~(T6 _ _ _ _ _ x) = f x-    foldr f z ~(T6 _ _ _ _ _ x) = f x z-    length _ = 1-    null _ = False-instance Foldable (T7 a b c d e f) where-    foldMap f ~(T7 _ _ _ _ _ _ x) = f x-    foldr f z ~(T7 _ _ _ _ _ _ x) = f x z-    length _ = 1-    null _ = False-instance Foldable (T8 a b c d e f g) where-    foldMap f ~(T8 _ _ _ _ _ _ _ x) = f x-    foldr f z ~(T8 _ _ _ _ _ _ _ x) = f x z-    length _ = 1-    null _ = False-instance Foldable (T9 a b c d e f g h) where-    foldMap f ~(T9 _ _ _ _ _ _ _ _ x) = f x-    foldr f z ~(T9 _ _ _ _ _ _ _ _ x) = f x z-    length _ = 1-    null _ = False--instance Traversable T1 where-    traverse f = fmap T1 . coerce f-instance Traversable (T2 a) where-    traverse fun ~(T2 a b) = T2 a <$> fun b-instance Traversable (T3 a b) where-    traverse fun ~(T3 a b c) = T3 a b <$> fun c-instance Traversable (T4 a b c) where-    traverse fun ~(T4 a b c d) = T4 a b c <$> fun d-instance Traversable (T5 a b c d) where-    traverse fun ~(T5 a b c d e) = T5 a b c d <$> fun e-instance Traversable (T6 a b c d e) where-    traverse fun ~(T6 a b c d e f) = T6 a b c d e <$> fun f-instance Traversable (T7 a b c d e f) where-    traverse fun ~(T7 a b c d e f g) = T7 a b c d e f <$> fun g-instance Traversable (T8 a b c d e f g) where-    traverse fun ~(T8 a b c d e f g h) = T8 a b c d e f g <$> fun h-instance Traversable (T9 a b c d e f g h) where-    traverse fun ~(T9 a b c d e f g h i) = T9 a b c d e f g h <$> fun i---instance Bifunctor T2 where-    first  funA ~(T2 a b) = T2 (funA a) b-    second funB ~(T2 a b) = T2 a (funB b)-    bimap  funA funB ~(T2 a b) = T2 (funA a) (funB b)-instance Bifunctor (T3 a) where-    first  funA ~(T3 a b c) = T3 a (funA b) c-    second funB ~(T3 a b c) = T3 a b (funB c)-    bimap  funA funB ~(T3 a b c) = T3 a (funA b) (funB c)-instance Bifunctor (T4 a b) where-    first  funA ~(T4 a b c d) = T4 a b (funA c) d-    second funB ~(T4 a b c d) = T4 a b c (funB d)-    bimap  funA funB ~(T4 a b c d) = T4 a b (funA c) (funB d)-instance Bifunctor (T5 a b c) where-    first  funA ~(T5 a b c d e) = T5 a b c (funA d) e-    second funB ~(T5 a b c d e) = T5 a b c d (funB e)-    bimap  funA funB ~(T5 a b c d e) = T5 a b c (funA d) (funB e)-instance Bifunctor (T6 a b c d) where-    first  funA ~(T6 a b c d e f) = T6 a b c d (funA e) f-    second funB ~(T6 a b c d e f) = T6 a b c d e (funB f)-    bimap  funA funB ~(T6 a b c d e f) = T6 a b c d (funA e) (funB f)-instance Bifunctor (T7 a b c d e) where-    first  funA ~(T7 a b c d e f g) = T7 a b c d e (funA f) g-    second funB ~(T7 a b c d e f g) = T7 a b c d e f (funB g)-    bimap  funA funB ~(T7 a b c d e f g) = T7 a b c d e (funA f) (funB g)-instance Bifunctor (T8 a b c d e f) where-    first  funA ~(T8 a b c d e f g h) = T8 a b c d e f (funA g) h-    second funB ~(T8 a b c d e f g h) = T8 a b c d e f g (funB h)-    bimap  funA funB ~(T8 a b c d e f g h) = T8 a b c d e f (funA g) (funB h)-instance Bifunctor (T9 a b c d e f g) where-    first  funA ~(T9 a b c d e f g h i) = T9 a b c d e f g (funA h) i-    second funB ~(T9 a b c d e f g h i) = T9 a b c d e f g h (funB i)-    bimap  funA funB ~(T9 a b c d e f g h i) = T9 a b c d e f g (funA h) (funB i)---class StrictTuple a b | a -> b, b -> a where-    toStrictTuple :: a -> b-    fromStrictTuple :: b -> a--instance StrictTuple () T0 where-    toStrictTuple () = T0-    fromStrictTuple T0 = ()--- instance StrictTuple a (T1 a) where---     toStrictTuple !a = T1 a---     fromStrictTuple (T1 !a) = a-instance StrictTuple (a,b) (T2 a b) where-    toStrictTuple (!a,!b) = T2 a b-    fromStrictTuple (T2 !a !b) = (a,b)-instance StrictTuple (a,b,c) (T3 a b c) where-    toStrictTuple (!a,!b,!c) = T3 a b c-    fromStrictTuple (T3 !a !b !c) = (a,b,c)-instance StrictTuple (a,b,c,d) (T4 a b c d) where-    toStrictTuple (!a,!b,!c,!d) = T4 a b c d-    fromStrictTuple (T4 !a !b !c !d) = (a,b,c,d)-instance StrictTuple (a,b,c,d,e) (T5 a b c d e) where-    toStrictTuple (!a,!b,!c,!d,!e) = T5 a b c d e-    fromStrictTuple (T5 !a !b !c !d !e) = (a,b,c,d,e)-instance StrictTuple (a,b,c,d,e,f) (T6 a b c d e f) where-    toStrictTuple (!a,!b,!c,!d,!e,!f) = T6 a b c d e f-    fromStrictTuple (T6 !a !b !c !d !e !f) = (a,b,c,d,e,f)-instance StrictTuple (a,b,c,d,e,f,g) (T7 a b c d e f g) where-    toStrictTuple (!a,!b,!c,!d,!e,!f,!g) = T7 a b c d e f g-    fromStrictTuple (T7 !a !b !c !d !e !f !g) = (a,b,c,d,e,f,g)-instance StrictTuple (a,b,c,d,e,f,g,h) (T8 a b c d e f g h) where-    toStrictTuple (!a,!b,!c,!d,!e,!f,!g,!h) = T8 a b c d e f g h-    fromStrictTuple (T8 !a !b !c !d !e !f !g !h) = (a,b,c,d,e,f,g,h)-instance StrictTuple (a,b,c,d,e,f,g,h,i) (T9 a b c d e f g h i) where-    toStrictTuple (!a,!b,!c,!d,!e,!f,!g,!h,!i) = T9 a b c d e f g h i-    fromStrictTuple (T9 !a !b !c !d !e !f !g !h !i) = (a,b,c,d,e,f,g,h,i)
+ src/Numeric/Tuple.hs view
@@ -0,0 +1,566 @@+{-# LANGUAGE BangPatterns           #-}+{-# LANGUAGE DeriveDataTypeable     #-}+{-# LANGUAGE DeriveGeneric          #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses  #-}+{-# LANGUAGE ScopedTypeVariables    #-}+-----------------------------------------------------------------------------+-- |+-- Module      :  Numeric.Tuple+-- Copyright   :  (c) Artem Chirkin+-- License     :  BSD3+--+-- Maintainer  :  chirkin@arch.ethz.ch+--+-- This module defines a set of tuple data types to substitute normal Haskell tuples.+-- The reason is that @Monoid@ instances of normal tuples are lazy,+-- which makes folds with arithmetic operations leak memory.+-- @Semigroup@ and @Monoid@ instances of tuples in this module are strict in all their arguments.+--+-- Using tuple types defined here together with @Numeric.Semigroup.foldMap'@,+-- one can combine multiple monoidal fold structures in a single pass over a foldable container:+--+-- >> foldMap' (T3 <$> Max <*> Sum <*> Min) $ take 100000000 ([1..] :: [Int])+--+-- The example above runs in constant space, which would not happen with normal+--  GHC tuples due to strictness properties of their `mappend` implementations+--  (tuple arguments are not enforced).+--+--+-----------------------------------------------------------------------------+module Numeric.Tuple+    ( T0 (..), T1 (..), T2 (..), T3 (..), T4 (..)+    , T5 (..), T6 (..), T7 (..), T8 (..), T9 (..)+    , AsTuple (..)+    , foldMap'+    ) where++import           Data.Bifunctor+import           Data.Coerce       (coerce)+import           Data.Data+import           GHC.Generics+import           Numeric.Semigroup++data T0 = T0+  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic)+newtype T1 a = T1 a+  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)+data T2 a b = T2 a b+  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)+data T3 a b c = T3 a b c+  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)+data T4 a b c d = T4 a b c d+  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)+data T5 a b c d e = T5 a b c d e+  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)+data T6 a b c d e f = T6 a b c d e f+  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)+data T7 a b c d e f g = T7 a b c d e f g+  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)+data T8 a b c d e f g h = T8 a b c d e f g h+  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)+data T9 a b c d e f g h i = T9 a b c d e f g h i+  deriving (Eq, Show, Read, Ord, Data, Typeable, Generic, Generic1)+++-- | This function is exactly the same as @($!)@ defined in GHC.Base,+--   but it is left-associative, which makes it possible to apply+--   several arguments to one function strictly.+(!$)   :: (a -> b) -> a -> b+f !$ x  = let !vx = x in f vx+infixl 1 !$+{-# INLINE (!$) #-}++instance Semigroup T0 where+    _ <> _ = T0+instance Semigroup a => Semigroup (T1 a) where+    (<>) = coerce ((<>) :: a -> a -> a)+instance ( Semigroup a+         , Semigroup b+         ) => Semigroup (T2 a b) where+    (T2 !ax !bx) <> (T2 !ay !by) = T2 !$ ax <> ay !$ bx <> by+instance ( Semigroup a+         , Semigroup b+         , Semigroup c+         ) => Semigroup (T3 a b c) where+    (T3 !ax !bx !cx) <> (T3 !ay !by !cy)+      = T3 !$ ax <> ay !$ bx <> by !$ cx <> cy+instance ( Semigroup a+         , Semigroup b+         , Semigroup c+         , Semigroup d+         ) => Semigroup (T4 a b c d) where+    (T4 !ax !bx !cx !dx) <> (T4 !ay !by !cy !dy)+      = T4 !$ ax <> ay !$ bx <> by !$ cx <> cy !$ dx <> dy+instance ( Semigroup a+         , Semigroup b+         , Semigroup c+         , Semigroup d+         , Semigroup e+         ) => Semigroup (T5 a b c d e) where+    (T5 !ax !bx !cx !dx !ex) <> (T5 !ay !by !cy !dy !ey)+      = T5 !$ ax <> ay !$ bx <> by !$ cx <> cy !$ dx <> dy !$ ex <> ey+instance ( Semigroup a+         , Semigroup b+         , Semigroup c+         , Semigroup d+         , Semigroup e+         , Semigroup f+         ) => Semigroup (T6 a b c d e f) where+    (T6 !ax !bx !cx !dx !ex !fx) <> (T6 !ay !by !cy !dy !ey !fy)+      = T6 !$ ax <> ay !$ bx <> by !$ cx <> cy !$ dx <> dy !$ ex <> ey !$ fx <> fy+instance ( Semigroup a+         , Semigroup b+         , Semigroup c+         , Semigroup d+         , Semigroup e+         , Semigroup f+         , Semigroup g+         ) => Semigroup (T7 a b c d e f g) where+    (T7 !ax !bx !cx !dx !ex !fx !gx) <> (T7 !ay !by !cy !dy !ey !fy !gy)+      = T7 !$ ax <> ay !$ bx <> by !$ cx <> cy !$ dx <> dy !$ ex <> ey !$ fx <> fy !$ gx <> gy+instance ( Semigroup a+         , Semigroup b+         , Semigroup c+         , Semigroup d+         , Semigroup e+         , Semigroup f+         , Semigroup g+         , Semigroup h+         ) => Semigroup (T8 a b c d e f g h) where+    (T8 !ax !bx !cx !dx !ex !fx !gx !hx) <> (T8 !ay !by !cy !dy !ey !fy !gy !hy)+      = T8 !$ ax <> ay !$ bx <> by !$ cx <> cy !$ dx <> dy !$ ex <> ey !$ fx <> fy !$ gx <> gy !$ hx <> hy+instance ( Semigroup a+         , Semigroup b+         , Semigroup c+         , Semigroup d+         , Semigroup e+         , Semigroup f+         , Semigroup g+         , Semigroup h+         , Semigroup i+         ) => Semigroup (T9 a b c d e f g h i) where+    (T9 !ax !bx !cx !dx !ex !fx !gx !hx !ix) <> (T9 !ay !by !cy !dy !ey !fy !gy !hy !iy)+      = T9 !$ ax <> ay !$ bx <> by !$ cx <> cy !$ dx <> dy !$ ex <> ey !$ fx <> fy !$ gx <> gy !$ hx <> hy !$ ix <> iy++++instance Monoid T0 where+    mempty = T0+    mappend _ _ = T0+instance Monoid a => Monoid (T1 a) where+    mempty = T1 !$ mempty+    mappend = coerce (mappend :: a -> a -> a)+instance ( Monoid a+         , Monoid b+         ) => Monoid (T2 a b) where+    mempty = T2 !$ mempty !$ mempty+    mappend (T2 !ax !bx) (T2 !ay !by) = T2 !$ mappend ax ay !$ mappend bx by+instance ( Monoid a+         , Monoid b+         , Monoid c+         ) => Monoid (T3 a b c) where+    mempty = T3 !$ mempty !$ mempty !$ mempty+    mappend (T3 !ax !bx !cx) (T3 !ay !by !cy)+      = T3 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy+instance ( Monoid a+         , Monoid b+         , Monoid c+         , Monoid d+         ) => Monoid (T4 a b c d) where+    mempty = T4 !$ mempty !$ mempty !$ mempty !$ mempty+    mappend (T4 !ax !bx !cx !dx) (T4 !ay !by !cy !dy)+      = T4 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy+instance ( Monoid a+         , Monoid b+         , Monoid c+         , Monoid d+         , Monoid e+         ) => Monoid (T5 a b c d e) where+    mempty = T5 !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty+    mappend (T5 !ax !bx !cx !dx !ex) (T5 !ay !by !cy !dy !ey)+      = T5 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy !$ mappend ex ey+instance ( Monoid a+         , Monoid b+         , Monoid c+         , Monoid d+         , Monoid e+         , Monoid f+         ) => Monoid (T6 a b c d e f) where+    mempty = T6 !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty+    mappend (T6 !ax !bx !cx !dx !ex !fx) (T6 !ay !by !cy !dy !ey !fy)+      = T6 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy !$ mappend ex ey !$ mappend fx fy+instance ( Monoid a+         , Monoid b+         , Monoid c+         , Monoid d+         , Monoid e+         , Monoid f+         , Monoid g+         ) => Monoid (T7 a b c d e f g) where+    mempty = T7 !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty+    mappend (T7 !ax !bx !cx !dx !ex !fx !gx) (T7 !ay !by !cy !dy !ey !fy !gy)+      = T7 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy !$ mappend ex ey+           !$ mappend fx fy !$ mappend gx gy+instance ( Monoid a+         , Monoid b+         , Monoid c+         , Monoid d+         , Monoid e+         , Monoid f+         , Monoid g+         , Monoid h+         ) => Monoid (T8 a b c d e f g h) where+    mempty = T8 !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty+    mappend (T8 !ax !bx !cx !dx !ex !fx !gx !hx) (T8 !ay !by !cy !dy !ey !fy !gy !hy)+      = T8 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy !$ mappend ex ey+           !$ mappend fx fy !$ mappend gx gy !$ mappend hx hy+instance ( Monoid a+         , Monoid b+         , Monoid c+         , Monoid d+         , Monoid e+         , Monoid f+         , Monoid g+         , Monoid h+         , Monoid i+         ) => Monoid (T9 a b c d e f g h i) where+    mempty = T9 !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty+    mappend (T9 !ax !bx !cx !dx !ex !fx !gx !hx !ix) (T9 !ay !by !cy !dy !ey !fy !gy !hy !iy)+      = T9 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy !$ mappend ex ey+           !$ mappend fx fy !$ mappend gx gy !$ mappend hx hy !$ mappend ix iy+++instance Functor T1 where+    fmap = coerce+instance Functor (T2 a) where+    fmap fun ~(T2 a b) = T2 a (fun b)+instance Functor (T3 a b) where+    fmap fun ~(T3 a b c) = T3 a b (fun c)+instance Functor (T4 a b c) where+    fmap fun ~(T4 a b c d) = T4 a b c (fun d)+instance Functor (T5 a b c d) where+    fmap fun ~(T5 a b c d e) = T5 a b c d (fun e)+instance Functor (T6 a b c d e) where+    fmap fun ~(T6 a b c d e f) = T6 a b c d e (fun f)+instance Functor (T7 a b c d e f) where+    fmap fun ~(T7 a b c d e f g) = T7 a b c d e f (fun g)+instance Functor (T8 a b c d e f g) where+    fmap fun ~(T8 a b c d e f g h) = T8 a b c d e f g (fun h)+instance Functor (T9 a b c d e f g h) where+    fmap fun ~(T9 a b c d e f g h i) = T9 a b c d e f g h (fun i)++instance Applicative T1 where+    pure = T1+    (<*>) = coerce+instance ( Monoid a+         ) => Applicative (T2 a) where+    pure = T2 !$ mempty+    ~(T2 !ax fun) <*> ~(T2 !ay val)+      = T2 !$ mappend ax ay $ fun val+instance ( Monoid a+         , Monoid b+         ) => Applicative (T3 a b) where+    pure = T3 !$ mempty !$ mempty+    ~(T3 !ax !bx fun) <*> ~(T3 !ay !by val)+      = T3 !$ mappend ax ay !$ mappend bx by $ fun val+instance ( Monoid a+         , Monoid b+         , Monoid c+         ) => Applicative (T4 a b c) where+    pure = T4 !$ mempty !$ mempty !$ mempty+    ~(T4 !ax !bx !cx fun) <*> ~(T4 !ay !by !cy val)+      = T4 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy $ fun val+instance ( Monoid a+         , Monoid b+         , Monoid c+         , Monoid d+         ) => Applicative (T5 a b c d) where+    pure = T5 !$ mempty !$ mempty !$ mempty !$ mempty+    ~(T5 !ax !bx !cx !dx fun) <*> ~(T5 !ay !by !cy !dy val)+      = T5 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy $ fun val+instance ( Monoid a+         , Monoid b+         , Monoid c+         , Monoid d+         , Monoid e+         ) => Applicative (T6 a b c d e) where+    pure = T6 !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty+    ~(T6 !ax !bx !cx !dx !ex fun) <*> ~(T6 !ay !by !cy !dy !ey val)+      = T6 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy+           !$ mappend ex ey $ fun val+instance ( Monoid a+         , Monoid b+         , Monoid c+         , Monoid d+         , Monoid e+         , Monoid f+         ) => Applicative (T7 a b c d e f) where+    pure = T7 !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty+    ~(T7 !ax !bx !cx !dx !ex !fx fun) <*> ~(T7 !ay !by !cy !dy !ey !fy val)+      = T7 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy+           !$ mappend ex ey !$ mappend fx fy $ fun val+instance ( Monoid a+         , Monoid b+         , Monoid c+         , Monoid d+         , Monoid e+         , Monoid f+         , Monoid g+         ) => Applicative (T8 a b c d e f g) where+    pure = T8 !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty+    ~(T8 !ax !bx !cx !dx !ex !fx !gx fun) <*> ~(T8 !ay !by !cy !dy !ey !fy !gy val)+      = T8 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy+           !$ mappend ex ey !$ mappend fx fy !$ mappend gx gy $ fun val+instance ( Monoid a+         , Monoid b+         , Monoid c+         , Monoid d+         , Monoid e+         , Monoid f+         , Monoid g+         , Monoid h+         ) => Applicative (T9 a b c d e f g h) where+    pure = T9 !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty !$ mempty+    ~(T9 !ax !bx !cx !dx !ex !fx !gx !hx fun) <*> ~(T9 !ay !by !cy !dy !ey !fy !gy !hy val)+      = T9 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy+           !$ mappend ex ey !$ mappend fx fy !$ mappend gx gy !$ mappend hx hy $ fun val++++instance Monad T1 where+    m >>= k = k (coerce m)+instance ( Monoid a+         ) => Monad (T2 a) where+    ~(T2 !ax x) >>= k =+        T2 !$ mappend ax ay $ val+      where+        ~(T2 !ay val) = k x+instance ( Monoid a, Monoid b+         ) => Monad (T3 a b) where+    ~(T3 !ax !bx x) >>= k =+        T3 !$ mappend ax ay !$ mappend bx by $ val+      where+        ~(T3 !ay !by val) = k x+instance ( Monoid a, Monoid b, Monoid c+         ) => Monad (T4 a b c) where+    ~(T4 !ax !bx !cx x) >>= k =+        T4 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy $ val+      where+        ~(T4 !ay !by !cy val) = k x+instance ( Monoid a, Monoid b, Monoid c, Monoid d+         ) => Monad (T5 a b c d) where+    ~(T5 !ax !bx !cx !dx x) >>= k =+        T5 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy $ val+      where+        ~(T5 !ay !by !cy !dy val) = k x+instance ( Monoid a, Monoid b, Monoid c, Monoid d+         , Monoid e+         ) => Monad (T6 a b c d e) where+    ~(T6 !ax !bx !cx !dx !ex x) >>= k =+        T6 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy+           !$ mappend ex ey $ val+      where+        ~(T6 !ay !by !cy !dy !ey val) = k x+instance ( Monoid a, Monoid b, Monoid c, Monoid d+         , Monoid e, Monoid f+         ) => Monad (T7 a b c d e f) where+    ~(T7 !ax !bx !cx !dx !ex !fx x) >>= k =+        T7 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy+           !$ mappend ex ey !$ mappend fx fy $ val+      where+        ~(T7 !ay !by !cy !dy !ey !fy val) = k x+instance ( Monoid a, Monoid b, Monoid c, Monoid d+         , Monoid e, Monoid f, Monoid g+         ) => Monad (T8 a b c d e f g) where+    ~(T8 !ax !bx !cx !dx !ex !fx !gx x) >>= k =+        T8 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy+           !$ mappend ex ey !$ mappend fx fy !$ mappend gx gy $ val+      where+        ~(T8 !ay !by !cy !dy !ey !fy !gy val) = k x+instance ( Monoid a, Monoid b, Monoid c, Monoid d+         , Monoid e, Monoid f, Monoid g, Monoid h+         ) => Monad (T9 a b c d e f g h) where+    ~(T9 !ax !bx !cx !dx !ex !fx !gx !hx x) >>= k =+        T9 !$ mappend ax ay !$ mappend bx by !$ mappend cx cy !$ mappend dx dy+           !$ mappend ex ey !$ mappend fx fy !$ mappend gx gy !$ mappend hx hy $ val+      where+        ~(T9 !ay !by !cy !dy !ey !fy !gy !hy val) = k x++instance Bounded T0 where+    minBound = T0+    maxBound = T0+instance ( Bounded a+         ) => Bounded (T1 a) where+    minBound = T1 !$ minBound+    maxBound = T1 !$ maxBound+instance ( Bounded a, Bounded b+         ) => Bounded (T2 a b) where+    minBound = T2 !$ minBound !$ minBound+    maxBound = T2 !$ maxBound !$ maxBound+instance ( Bounded a, Bounded b, Bounded c+         ) => Bounded (T3 a b c) where+    minBound = T3 !$ minBound !$ minBound !$ minBound+    maxBound = T3 !$ maxBound !$ maxBound !$ maxBound+instance ( Bounded a, Bounded b, Bounded c, Bounded d+         ) => Bounded (T4 a b c d) where+    minBound = T4 !$ minBound !$ minBound !$ minBound !$ minBound+    maxBound = T4 !$ maxBound !$ maxBound !$ maxBound !$ maxBound+instance ( Bounded a, Bounded b, Bounded c, Bounded d+         , Bounded e+         ) => Bounded (T5 a b c d e) where+    minBound = T5 !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound+    maxBound = T5 !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound+instance ( Bounded a, Bounded b, Bounded c, Bounded d+         , Bounded e, Bounded f+         ) => Bounded (T6 a b c d e f) where+    minBound = T6 !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound+    maxBound = T6 !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound+instance ( Bounded a, Bounded b, Bounded c, Bounded d+         , Bounded e, Bounded f, Bounded g+         ) => Bounded (T7 a b c d e f g) where+    minBound = T7 !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound+    maxBound = T7 !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound+instance ( Bounded a, Bounded b, Bounded c, Bounded d+         , Bounded e, Bounded f, Bounded g, Bounded h+         ) => Bounded (T8 a b c d e f g h) where+    minBound = T8 !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound+    maxBound = T8 !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound+instance ( Bounded a, Bounded b, Bounded c, Bounded d+         , Bounded e, Bounded f, Bounded g, Bounded h, Bounded i+         ) => Bounded (T9 a b c d e f g h i) where+    minBound = T9 !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound !$ minBound+    maxBound = T9 !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound !$ maxBound++instance Foldable T1 where+    foldMap = coerce+    foldr f z y = f (coerce y) z+instance Foldable (T2 a) where+    foldMap f ~(T2 _ x) = f x+    foldr f z ~(T2 _ x) = f x z+    length _ = 1+    null _ = False+instance Foldable (T3 a b) where+    foldMap f ~(T3 _ _ x) = f x+    foldr f z ~(T3 _ _ x) = f x z+    length _ = 1+    null _ = False+instance Foldable (T4 a b c) where+    foldMap f ~(T4 _ _ _ x) = f x+    foldr f z ~(T4 _ _ _ x) = f x z+    length _ = 1+    null _ = False+instance Foldable (T5 a b c e) where+    foldMap f ~(T5 _ _ _ _ x) = f x+    foldr f z ~(T5 _ _ _ _ x) = f x z+    length _ = 1+    null _ = False+instance Foldable (T6 a b c d e) where+    foldMap f ~(T6 _ _ _ _ _ x) = f x+    foldr f z ~(T6 _ _ _ _ _ x) = f x z+    length _ = 1+    null _ = False+instance Foldable (T7 a b c d e f) where+    foldMap f ~(T7 _ _ _ _ _ _ x) = f x+    foldr f z ~(T7 _ _ _ _ _ _ x) = f x z+    length _ = 1+    null _ = False+instance Foldable (T8 a b c d e f g) where+    foldMap f ~(T8 _ _ _ _ _ _ _ x) = f x+    foldr f z ~(T8 _ _ _ _ _ _ _ x) = f x z+    length _ = 1+    null _ = False+instance Foldable (T9 a b c d e f g h) where+    foldMap f ~(T9 _ _ _ _ _ _ _ _ x) = f x+    foldr f z ~(T9 _ _ _ _ _ _ _ _ x) = f x z+    length _ = 1+    null _ = False++instance Traversable T1 where+    traverse f = fmap T1 . coerce f+instance Traversable (T2 a) where+    traverse fun ~(T2 a b) = T2 a <$> fun b+instance Traversable (T3 a b) where+    traverse fun ~(T3 a b c) = T3 a b <$> fun c+instance Traversable (T4 a b c) where+    traverse fun ~(T4 a b c d) = T4 a b c <$> fun d+instance Traversable (T5 a b c d) where+    traverse fun ~(T5 a b c d e) = T5 a b c d <$> fun e+instance Traversable (T6 a b c d e) where+    traverse fun ~(T6 a b c d e f) = T6 a b c d e <$> fun f+instance Traversable (T7 a b c d e f) where+    traverse fun ~(T7 a b c d e f g) = T7 a b c d e f <$> fun g+instance Traversable (T8 a b c d e f g) where+    traverse fun ~(T8 a b c d e f g h) = T8 a b c d e f g <$> fun h+instance Traversable (T9 a b c d e f g h) where+    traverse fun ~(T9 a b c d e f g h i) = T9 a b c d e f g h <$> fun i+++instance Bifunctor T2 where+    first  funA ~(T2 a b) = T2 (funA a) b+    second funB ~(T2 a b) = T2 a (funB b)+    bimap  funA funB ~(T2 a b) = T2 (funA a) (funB b)+instance Bifunctor (T3 a) where+    first  funA ~(T3 a b c) = T3 a (funA b) c+    second funB ~(T3 a b c) = T3 a b (funB c)+    bimap  funA funB ~(T3 a b c) = T3 a (funA b) (funB c)+instance Bifunctor (T4 a b) where+    first  funA ~(T4 a b c d) = T4 a b (funA c) d+    second funB ~(T4 a b c d) = T4 a b c (funB d)+    bimap  funA funB ~(T4 a b c d) = T4 a b (funA c) (funB d)+instance Bifunctor (T5 a b c) where+    first  funA ~(T5 a b c d e) = T5 a b c (funA d) e+    second funB ~(T5 a b c d e) = T5 a b c d (funB e)+    bimap  funA funB ~(T5 a b c d e) = T5 a b c (funA d) (funB e)+instance Bifunctor (T6 a b c d) where+    first  funA ~(T6 a b c d e f) = T6 a b c d (funA e) f+    second funB ~(T6 a b c d e f) = T6 a b c d e (funB f)+    bimap  funA funB ~(T6 a b c d e f) = T6 a b c d (funA e) (funB f)+instance Bifunctor (T7 a b c d e) where+    first  funA ~(T7 a b c d e f g) = T7 a b c d e (funA f) g+    second funB ~(T7 a b c d e f g) = T7 a b c d e f (funB g)+    bimap  funA funB ~(T7 a b c d e f g) = T7 a b c d e (funA f) (funB g)+instance Bifunctor (T8 a b c d e f) where+    first  funA ~(T8 a b c d e f g h) = T8 a b c d e f (funA g) h+    second funB ~(T8 a b c d e f g h) = T8 a b c d e f g (funB h)+    bimap  funA funB ~(T8 a b c d e f g h) = T8 a b c d e f (funA g) (funB h)+instance Bifunctor (T9 a b c d e f g) where+    first  funA ~(T9 a b c d e f g h i) = T9 a b c d e f g (funA h) i+    second funB ~(T9 a b c d e f g h i) = T9 a b c d e f g h (funB i)+    bimap  funA funB ~(T9 a b c d e f g h i) = T9 a b c d e f g (funA h) (funB i)+++class AsTuple a b | a -> b, b -> a where+    toTuple :: a -> b+    fromTuple :: b -> a++instance AsTuple () T0 where+    toTuple () = T0+    fromTuple T0 = ()+-- instance StrictTuple a (T1 a) where+--     toTuple a = T1 a+--     fromTuple (T1 a) = a+instance AsTuple (a,b) (T2 a b) where+    toTuple (a,b) = T2 a b+    fromTuple (T2 a b) = (a,b)+instance AsTuple (a,b,c) (T3 a b c) where+    toTuple (a,b,c) = T3 a b c+    fromTuple (T3 a b c)= (a,b,c)+instance AsTuple (a,b,c,d) (T4 a b c d) where+    toTuple (a,b,c,d) = T4 a b c d+    fromTuple (T4 a b c d) = (a,b,c,d)+instance AsTuple (a,b,c,d,e) (T5 a b c d e) where+    toTuple (a,b,c,d,e) = T5 a b c d e+    fromTuple (T5 a b c d e) = (a,b,c,d,e)+instance AsTuple (a,b,c,d,e,f) (T6 a b c d e f) where+    toTuple (a,b,c,d,e,f) = T6 a b c d e f+    fromTuple (T6 a b c d e f) = (a,b,c,d,e,f)+instance AsTuple (a,b,c,d,e,f,g) (T7 a b c d e f g) where+    toTuple (a,b,c,d,e,f,g) = T7 a b c d e f g+    fromTuple (T7 a b c d e f g) = (a,b,c,d,e,f,g)+instance AsTuple (a,b,c,d,e,f,g,h) (T8 a b c d e f g h) where+    toTuple (a,b,c,d,e,f,g,h) = T8 a b c d e f g h+    fromTuple (T8 a b c d e f g h) = (a,b,c,d,e,f,g,h)+instance AsTuple (a,b,c,d,e,f,g,h,i) (T9 a b c d e f g h i) where+    toTuple (a,b,c,d,e,f,g,h,i) = T9 a b c d e f g h i+    fromTuple (T9 a b c d e f g h i) = (a,b,c,d,e,f,g,h,i)