on master help sign in
Flag to disable HasLens instances for tuples
commitf782c9fb69e1eb81fb2e5efee14717ad5d85a4dd authorVladislav Zavialov <vlad.z.4096@gmail.com> dateSat 3 Jun 2017, 21:20 (9 years ago) parentf9bd91a
15 files changed+45−114
ether.cabal+18−12 src/Ether/Internal.hs+3−3 src/Ether/Internal/TupleInstances.hs+24 src/Ether/Internal/TupleInstances_HasLens.hs−11 src/Ether/Internal/TupleInstances_HasLens_1.hs−7 src/Ether/Internal/TupleInstances_HasLens_2.hs−7 src/Ether/Internal/TupleInstances_HasLens_3.hs−7 src/Ether/Internal/TupleInstances_HasLens_4.hs−7 src/Ether/Internal/TupleInstances_HasLens_5.hs−7 src/Ether/Internal/TupleInstances_HasLens_6.hs−7 src/Ether/Internal/TupleInstances_HasLens_7.hs−7 src/Ether/Internal/TupleInstances_HasLens_8.hs−7 src/Ether/Internal/TupleInstances_HasLens_9.hs−7 src/Ether/Internal/TupleInstances_Tags.hs−13 src/Ether/Internal/TupleInstances_TagsK.hs−12
ether.cabal+18−12
@@ -24,6 +24,20 @@ source-repository head
2424 location: git@github.com:int-index/ether.git
2525
2626
27+flag disable-tup-instances
28+
29+ description:
30+ Disable auto-generated 'HasLens' instances for tuples. The reason one
31+ might want to do this is to reduce the size of .hi-files, as well as the
32+ time and memory GHC needs to build Ether. To recover flattening with
33+ tuples, use 'Ether.Internal.makeTupleInstancesHasLens' at specific tuple
34+ sizes you need in your application.
35+
36+ This is a build-time performance hack, enable this flag at your own risk.
37+
38+ default: False
39+ manual: True
40+
2741library
2842
2943 exposed-modules:
@@ -41,18 +55,7 @@ library
4155 Ether.Internal.HasLens
4256 Ether.Internal.TH_Utils
4357 Ether.Internal.TH_TupleInstances
44− Ether.Internal.TupleInstances_TagsK
45− Ether.Internal.TupleInstances_Tags
46− Ether.Internal.TupleInstances_HasLens
47− Ether.Internal.TupleInstances_HasLens_1
48− Ether.Internal.TupleInstances_HasLens_2
49− Ether.Internal.TupleInstances_HasLens_3
50− Ether.Internal.TupleInstances_HasLens_4
51− Ether.Internal.TupleInstances_HasLens_5
52− Ether.Internal.TupleInstances_HasLens_6
53− Ether.Internal.TupleInstances_HasLens_7
54− Ether.Internal.TupleInstances_HasLens_8
55− Ether.Internal.TupleInstances_HasLens_9
58+ Ether.Internal.TupleInstances
5659
5760 build-depends:
5861 base >=4.9 && <4.11,
@@ -102,6 +105,9 @@ library
102105 ghc-options:
103106 -Wall -O2
104107
108+ if flag(disable-tup-instances)
109+ cpp-options: -DDISABLE_TUP_INSTANCES
110+
105111test-suite regression
106112
107113 build-depends:
src/Ether/Internal.hs+3−3
@@ -16,6 +16,7 @@ module Ether.Internal
1616 , HandleSuper
1717 , HandleConstraint
1818 , Handle(..)
19+ , makeTupleInstancesHasLens
1920 ) where
2021
2122import Control.Applicative
@@ -27,9 +28,8 @@ import GHC.Exts (Constraint)
2728
2829import Ether.Internal.HasLens
2930import Ether.Internal.Tags
30−import Ether.Internal.TupleInstances_Tags ()
31−import Ether.Internal.TupleInstances_TagsK ()
32−import Ether.Internal.TupleInstances_HasLens ()
31+import Ether.Internal.TH_TupleInstances (makeTupleInstancesHasLens)
32+import Ether.Internal.TupleInstances ()
3333
3434data TAGGED e t
3535
src/Ether/Internal/TupleInstances.hsnew file+24
@@ -0,0 +1,24 @@
1+{-# OPTIONS -fno-warn-orphans #-}
2+{-# LANGUAGE CPP #-}
3+
4+module Ether.Internal.TupleInstances () where
5+
6+import Data.Tagged
7+import Ether.Internal.Tags
8+import Ether.Internal.TH_TupleInstances
9+
10+type instance TagsK () = '[]
11+type instance TagsK (Tagged t a) = '[KindOf t]
12+type instance TagsK (Tagged t0 a, Tagged t1 b) = '[KindOf t0, KindOf t1]
13+
14+makeTupleInstancesTagsK
15+
16+type instance Tags () = 'HNil
17+type instance Tags (Tagged t a) = 'HCons t 'HNil
18+type instance Tags (Tagged t0 a, Tagged t1 b) = 'HCons t0 ('HCons t1 'HNil)
19+
20+makeTupleInstancesTags
21+
22+#ifndef DISABLE_TUP_INSTANCES
23+makeTupleInstancesHasLens [2..62]
24+#endif
src/Ether/Internal/TupleInstances_HasLens.hsdeleted−11
@@ -1,11 +0,0 @@
1−module Ether.Internal.TupleInstances_HasLens () where
2−
3−import Ether.Internal.TupleInstances_HasLens_1 ()
4−import Ether.Internal.TupleInstances_HasLens_2 ()
5−import Ether.Internal.TupleInstances_HasLens_3 ()
6−import Ether.Internal.TupleInstances_HasLens_4 ()
7−import Ether.Internal.TupleInstances_HasLens_5 ()
8−import Ether.Internal.TupleInstances_HasLens_6 ()
9−import Ether.Internal.TupleInstances_HasLens_7 ()
10−import Ether.Internal.TupleInstances_HasLens_8 ()
11−import Ether.Internal.TupleInstances_HasLens_9 ()
src/Ether/Internal/TupleInstances_HasLens_1.hsdeleted−7
@@ -1,7 +0,0 @@
1−{-# OPTIONS -fno-warn-orphans #-}
2−
3−module Ether.Internal.TupleInstances_HasLens_1 () where
4−
5−import Ether.Internal.TH_TupleInstances (makeTupleInstancesHasLens)
6−
7−makeTupleInstancesHasLens [2..20]
src/Ether/Internal/TupleInstances_HasLens_2.hsdeleted−7
@@ -1,7 +0,0 @@
1−{-# OPTIONS -fno-warn-orphans #-}
2−
3−module Ether.Internal.TupleInstances_HasLens_2 () where
4−
5−import Ether.Internal.TH_TupleInstances (makeTupleInstancesHasLens)
6−
7−makeTupleInstancesHasLens [21..29]
src/Ether/Internal/TupleInstances_HasLens_3.hsdeleted−7
@@ -1,7 +0,0 @@
1−{-# OPTIONS -fno-warn-orphans #-}
2−
3−module Ether.Internal.TupleInstances_HasLens_3 () where
4−
5−import Ether.Internal.TH_TupleInstances (makeTupleInstancesHasLens)
6−
7−makeTupleInstancesHasLens [30..36]
src/Ether/Internal/TupleInstances_HasLens_4.hsdeleted−7
@@ -1,7 +0,0 @@
1−{-# OPTIONS -fno-warn-orphans #-}
2−
3−module Ether.Internal.TupleInstances_HasLens_4 () where
4−
5−import Ether.Internal.TH_TupleInstances (makeTupleInstancesHasLens)
6−
7−makeTupleInstancesHasLens [37..42]
src/Ether/Internal/TupleInstances_HasLens_5.hsdeleted−7
@@ -1,7 +0,0 @@
1−{-# OPTIONS -fno-warn-orphans #-}
2−
3−module Ether.Internal.TupleInstances_HasLens_5 () where
4−
5−import Ether.Internal.TH_TupleInstances (makeTupleInstancesHasLens)
6−
7−makeTupleInstancesHasLens [43..47]
src/Ether/Internal/TupleInstances_HasLens_6.hsdeleted−7
@@ -1,7 +0,0 @@
1−{-# OPTIONS -fno-warn-orphans #-}
2−
3−module Ether.Internal.TupleInstances_HasLens_6 () where
4−
5−import Ether.Internal.TH_TupleInstances (makeTupleInstancesHasLens)
6−
7−makeTupleInstancesHasLens [48..52]
src/Ether/Internal/TupleInstances_HasLens_7.hsdeleted−7
@@ -1,7 +0,0 @@
1−{-# OPTIONS -fno-warn-orphans #-}
2−
3−module Ether.Internal.TupleInstances_HasLens_7 () where
4−
5−import Ether.Internal.TH_TupleInstances (makeTupleInstancesHasLens)
6−
7−makeTupleInstancesHasLens [53..56]
src/Ether/Internal/TupleInstances_HasLens_8.hsdeleted−7
@@ -1,7 +0,0 @@
1−{-# OPTIONS -fno-warn-orphans #-}
2−
3−module Ether.Internal.TupleInstances_HasLens_8 () where
4−
5−import Ether.Internal.TH_TupleInstances (makeTupleInstancesHasLens)
6−
7−makeTupleInstancesHasLens [57..60]
src/Ether/Internal/TupleInstances_HasLens_9.hsdeleted−7
@@ -1,7 +0,0 @@
1−{-# OPTIONS -fno-warn-orphans #-}
2−
3−module Ether.Internal.TupleInstances_HasLens_9 () where
4−
5−import Ether.Internal.TH_TupleInstances (makeTupleInstancesHasLens)
6−
7−makeTupleInstancesHasLens [61..62]
src/Ether/Internal/TupleInstances_Tags.hsdeleted−13
@@ -1,13 +0,0 @@
1−module Ether.Internal.TupleInstances_Tags () where
2−
3−import Data.Tagged
4−
5−import Ether.Internal.Tags
6−import Ether.Internal.TupleInstances_TagsK ()
7−import Ether.Internal.TH_TupleInstances (makeTupleInstancesTags)
8−
9−type instance Tags () = 'HNil
10−type instance Tags (Tagged t a) = 'HCons t 'HNil
11−type instance Tags (Tagged t0 a, Tagged t1 b) = 'HCons t0 ('HCons t1 'HNil)
12−
13−makeTupleInstancesTags
src/Ether/Internal/TupleInstances_TagsK.hsdeleted−12
@@ -1,12 +0,0 @@
1−module Ether.Internal.TupleInstances_TagsK () where
2−
3−import Data.Tagged
4−
5−import Ether.Internal.Tags
6−import Ether.Internal.TH_TupleInstances (makeTupleInstancesTagsK)
7−
8−type instance TagsK () = '[]
9−type instance TagsK (Tagged t a) = '[KindOf t]
10−type instance TagsK (Tagged t0 a, Tagged t1 b) = '[KindOf t0, KindOf t1]
11−
12−makeTupleInstancesTagsK