on master help sign in
Nicer flatten-load syntax
f2e2715Index Int
.travis.yml+6−6
@@ -5,12 +5,12 @@ cache:
5 - $HOME/.stack/
5 - $HOME/.stack/
6
6
7before_install:
7before_install:
8− - mkdir -p ~/.local/bin
8+ - mkdir -p ~/.local/bin
9− - travis_retry curl -L https://github.com/commercialhaskell/stack/releases/download/v1.0.4.3/stack-1.0.4.3-linux-x86_64.tar.gz | tar -xvz
9+ - travis_retry curl -L https://github.com/commercialhaskell/stack/releases/download/v1.1.2/stack-1.1.2-linux-x86_64.tar.gz | tar -xvz
10− - mv stack-1.0.4.3-linux-x86_64/stack ~/.local/bin
10+ - mv stack-1.1.2-linux-x86_64/stack ~/.local/bin
11− - export PATH=~/.local/bin:$PATH
11+ - export PATH=~/.local/bin:$PATH
12− - stack --version
12+ - stack --version
13− - stack setup
13+ - stack setup
14
14
15install:
15install:
16 - stack install --only-dependencies --no-terminal
16 - stack install --only-dependencies --no-terminal
ether-flatten/src/Control/Ether/Flatten.hs+18−5
@@ -10,8 +10,10 @@
10
10
11module Control.Ether.Flatten
11module Control.Ether.Flatten
12 ( HasLens(..)
12 ( HasLens(..)
13− , Product(..)
13+ , Product
14 , load
14 , load
15+ , type (++)
16+ , (<+>)
15 ) where
17 ) where
16
18
17import Control.Lens
19import Control.Lens
@@ -24,10 +26,21 @@ data Product (ts :: [k]) (as :: [*]) where
24 Nil :: Product '[] '[]
26 Nil :: Product '[] '[]
25 Cons :: !a -> !(Product ts as) -> Product (t ': ts) (a ': as)
27 Cons :: !a -> !(Product ts as) -> Product (t ': ts) (a ': as)
26
28
27−load
28− :: forall tag a tags as
29+load :: forall tag a . a -> Product '[tag] '[a]
29− . a -> Product tags as -> Product (tag ': tags) (a ': as)
30+load a = Cons a Nil
30−load = Cons
31+{-# INLINE load #-}
32+
33+type family (xs1 :: [k]) ++ (xs2 :: [k]) :: [k] where
34+ '[] ++ xs2 = xs2
35+ (a ': xs1) ++ xs2 = a ': (xs1 ++ xs2)
36+
37+(<+>)
38+ :: Product ts1 as1
39+ -> Product ts2 as2
40+ -> Product (ts1 ++ ts2) (as1 ++ as2)
41+Nil <+> as2 = as2
42+Cons a as1 <+> as2 = Cons a (as1 <+> as2)
43+{-# INLINE (<+>) #-}
31
44
32productHead ::
45productHead ::
33 Lens
46 Lens
ether-suite/bench/Bench.hs+7−26
@@ -31,9 +31,8 @@ readerSummatorMTL_flat_9 = do
31
31
32run_readerSummatorMTL_flat_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
32run_readerSummatorMTL_flat_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
33run_readerSummatorMTL_flat_9
33run_readerSummatorMTL_flat_9
34− (a1, a2, a3, a4, a5, a6, a7, a8, a9)
34+ (a1, a2, a3, a4, a5, a6, a7, a8, a9) =
35− = M.runReader readerSummatorMTL_flat_9
35+ M.runReader readerSummatorMTL_flat_9 (a9, a8, a7, a6, a5, a4, a3, a2, a1)
36− $ (a9, a8, a7, a6, a5, a4, a3, a2, a1)
37
36
38readerSummatorEther_sep_9
37readerSummatorEther_sep_9
39 :: ( E.MonadReader 1 Int m
38 :: ( E.MonadReader 1 Int m
@@ -78,33 +77,15 @@ run_readerSummatorEther_flatten_9
78 =
77 =
79 E.F.runReader
78 E.F.runReader
80 readerSummatorEther_sep_9
79 readerSummatorEther_sep_9
81− ( load @1 a9
80+ ( load @1 a9 <+> load @2 a8 <+> load @3 a7 <+> load @4 a6 <+>
82− . load @2 a8
83− . load @3 a7
84− . load @4 a6
85− . load @5 a5
81+ load @5 a5 <+> load @6 a4 <+> load @7 a3 <+> load @8 a2 <+>
86− . load @6 a4
87− . load @7 a3
88− . load @8 a2
89− . load @9 a1
82+ load @9 a1 )
90− $ Nil )
91
83
92run_readerSummatorEther_flattenhalf_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
84run_readerSummatorEther_flattenhalf_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
93run_readerSummatorEther_flattenhalf_9
85run_readerSummatorEther_flattenhalf_9
94 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
86 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
95− = flip E.F.runReader
87+ = flip E.F.runReader (load @1 a9 <+> load @2 a8 <+> load @3 a7 <+> load @4 a6)
96− ( load @1 a9
97− . load @2 a8
98− . load @3 a7
99− . load @4 a6
100− $ Nil )
101− . flip E.F.runReaderT
88+ . flip E.F.runReaderT (load @5 a5 <+> load @6 a4 <+> load @7 a3 <+> load @8 a2 <+> load @9 a1)
102− ( load @5 a5
103− . load @6 a4
104− . load @7 a3
105− . load @8 a2
106− . load @9 a1
107− $ Nil )
108 $ readerSummatorEther_sep_9
89 $ readerSummatorEther_sep_9
109
90
110tuple_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int)
91tuple_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int)
stack.yaml+1−1
@@ -1,4 +1,4 @@
1−resolver: nightly-2016-05-26
1+resolver: nightly-2016-06-21
2
2
3packages:
3packages:
4- 'ether'
4- 'ether'