Tuple.hs (5454B)
1 module Lude.Haskell.Tuple ( 2 Tuple0#, 3 Tuple1#, 4 Tuple2#, 5 Tuple3#, 6 Tuple4#, 7 Tuple5#, 8 Tuple6#, 9 Tuple7#, 10 Tuple8#, 11 Tuple9#, 12 Tuple0, 13 MkTuple0, 14 pattern MkTuple0, 15 Tuple1, 16 MkTuple1, 17 pattern MkTuple1, 18 Tuple2, 19 MkTuple2, 20 pattern MkTuple2, 21 Tuple3, 22 MkTuple3, 23 pattern MkTuple3, 24 Tuple4, 25 MkTuple4, 26 pattern MkTuple4, 27 Tuple5, 28 MkTuple5, 29 pattern MkTuple5, 30 Tuple6, 31 MkTuple6, 32 pattern MkTuple6, 33 Tuple7, 34 MkTuple7, 35 pattern MkTuple7, 36 Tuple8, 37 MkTuple8, 38 pattern MkTuple8, 39 Tuple9, 40 MkTuple9, 41 pattern MkTuple9, 42 Tuple#, 43 Tuple, 44 ) where 45 46 import Data.Tuple.Experimental ( 47 Tuple0, 48 Tuple0#, 49 Tuple1, 50 Tuple1#, 51 Tuple2, 52 Tuple2#, 53 Tuple3, 54 Tuple3#, 55 Tuple4, 56 Tuple4#, 57 Tuple5, 58 Tuple5#, 59 Tuple6, 60 Tuple6#, 61 Tuple7, 62 Tuple7#, 63 Tuple8, 64 Tuple8#, 65 Tuple9, 66 Tuple9#, 67 ) 68 69 import Data.Tuple.Experimental qualified as GHC 70 71 import Lude.Haskell.Core 72 import Lude.Haskell.Repr qualified as Repr 73 import Lude.Haskell.Type 74 75 -- TODO: Rename so that we don't have # in names? 76 77 -------------------------------------------------------------------------------- 78 79 type MkTuple0 :: Tuple0 80 type MkTuple0 = () 81 pattern MkTuple0 :: Tuple0 82 pattern MkTuple0 = () 83 {-# COMPLETE MkTuple0 #-} 84 85 type MkTuple1 :: a -> Tuple1 a 86 type MkTuple1 = GHC.MkSolo 87 pattern MkTuple1 :: a -> Tuple1 a 88 pattern MkTuple1 a = GHC.MkSolo a 89 {-# COMPLETE MkTuple1 #-} 90 91 type MkTuple2 :: a -> b -> Tuple2 a b 92 type MkTuple2 = (,) 93 pattern MkTuple2 :: a -> b -> Tuple2 a b 94 pattern MkTuple2 a b = (a, b) 95 {-# COMPLETE MkTuple2 #-} 96 97 type MkTuple3 :: a -> b -> c -> Tuple3 a b c 98 type MkTuple3 = (,,) 99 pattern MkTuple3 :: a -> b -> c -> Tuple3 a b c 100 pattern MkTuple3 a b c = (a, b, c) 101 {-# COMPLETE MkTuple3 #-} 102 103 type MkTuple4 :: a -> b -> c -> d -> Tuple4 a b c d 104 type MkTuple4 = (,,,) 105 pattern MkTuple4 :: a -> b -> c -> d -> Tuple4 a b c d 106 pattern MkTuple4 a b c d = (a, b, c, d) 107 {-# COMPLETE MkTuple4 #-} 108 109 type MkTuple5 :: a -> b -> c -> d -> e -> Tuple5 a b c d e 110 type MkTuple5 = (,,,,) 111 pattern MkTuple5 :: a -> b -> c -> d -> e -> Tuple5 a b c d e 112 pattern MkTuple5 a b c d e = (a, b, c, d, e) 113 {-# COMPLETE MkTuple5 #-} 114 115 type MkTuple6 :: a -> b -> c -> d -> e -> f -> Tuple6 a b c d e f 116 type MkTuple6 = (,,,,,) 117 pattern MkTuple6 :: a -> b -> c -> d -> e -> f -> Tuple6 a b c d e f 118 pattern MkTuple6 a b c d e f = (a, b, c, d, e, f) 119 {-# COMPLETE MkTuple6 #-} 120 121 type MkTuple7 :: a -> b -> c -> d -> e -> f -> g -> Tuple7 a b c d e f g 122 type MkTuple7 = (,,,,,,) 123 pattern MkTuple7 :: a -> b -> c -> d -> e -> f -> g -> Tuple7 a b c d e f g 124 pattern MkTuple7 a b c d e f g = (a, b, c, d, e, f, g) 125 {-# COMPLETE MkTuple7 #-} 126 127 type MkTuple8 :: a -> b -> c -> d -> e -> f -> g -> h -> Tuple8 a b c d e f g h 128 type MkTuple8 = (,,,,,,,) 129 pattern MkTuple8 :: a -> b -> c -> d -> e -> f -> g -> h -> Tuple8 a b c d e f g h 130 pattern MkTuple8 a b c d e f g h = (a, b, c, d, e, f, g, h) 131 {-# COMPLETE MkTuple8 #-} 132 133 type MkTuple9 :: a -> b -> c -> d -> e -> f -> g -> h -> i -> Tuple9 a b c d e f g h i 134 type MkTuple9 = (,,,,,,,,) 135 pattern MkTuple9 :: a -> b -> c -> d -> e -> f -> g -> h -> i -> Tuple9 a b c d e f g h i 136 pattern MkTuple9 a b c d e f g h i = (a, b, c, d, e, f, g, h, i) 137 {-# COMPLETE MkTuple9 #-} 138 139 -------------------------------------------------------------------------------- 140 141 type R :: forall {r :: Repr}. Type# r -> Repr 142 type family R _ where 143 R (_ :: Type# r) = r 144 145 type TupleRepr :: forall {k}. k -> Repr 146 type family TupleRepr _ where 147 TupleRepr () = Repr.Tuple [] 148 TupleRepr (a) = Repr.Tuple [R a] 149 TupleRepr (a, b) = Repr.Tuple [R a, R b] 150 TupleRepr (a, b, c) = Repr.Tuple [R a, R b, R c] 151 TupleRepr (a, b, c, d) = Repr.Tuple [R a, R b, R c, R d] 152 TupleRepr (a, b, c, d, e) = Repr.Tuple [R a, R b, R c, R d, R e] 153 TupleRepr (a, b, c, d, e, f) = Repr.Tuple [R a, R b, R c, R d, R e, R f] 154 TupleRepr (a, b, c, d, e, f, g) = Repr.Tuple [R a, R b, R c, R d, R e, R f, R g] 155 TupleRepr (a, b, c, d, e, f, g, h) = Repr.Tuple [R a, R b, R c, R d, R e, R f, R g, R h] 156 TupleRepr (a, b, c, d, e, f, g, h, i) = Repr.Tuple [R a, R b, R c, R d, R e, R f, R g, R h, R i] 157 TupleRepr (GHC.MkSolo a) = Repr.Tuple [R a] 158 159 type Tuple# :: forall {k}. forall (a :: k) -> Type# (TupleRepr a) 160 type family Tuple# _ where 161 Tuple# () = GHC.Tuple0# 162 Tuple# (a) = GHC.Tuple1# a 163 Tuple# (a, b) = GHC.Tuple2# a b 164 Tuple# (a, b, c) = GHC.Tuple3# a b c 165 Tuple# (a, b, c, d) = GHC.Tuple4# a b c d 166 Tuple# (a, b, c, d, e) = GHC.Tuple5# a b c d e 167 Tuple# (a, b, c, d, e, f) = GHC.Tuple6# a b c d e f 168 Tuple# (a, b, c, d, e, f, g) = GHC.Tuple7# a b c d e f g 169 Tuple# (a, b, c, d, e, f, g, h) = GHC.Tuple8# a b c d e f g h 170 Tuple# (a, b, c, d, e, f, g, h, i) = GHC.Tuple9# a b c d e f g h i 171 Tuple# (GHC.MkSolo a) = GHC.Tuple1# a 172 173 type Tuple :: forall {k}. k -> Type 174 type family Tuple _ where 175 Tuple () = GHC.Tuple0 176 Tuple (a) = GHC.Tuple1 a 177 Tuple (a, b) = GHC.Tuple2 a b 178 Tuple (a, b, c) = GHC.Tuple3 a b c 179 Tuple (a, b, c, d) = GHC.Tuple4 a b c d 180 Tuple (a, b, c, d, e) = GHC.Tuple5 a b c d e 181 Tuple (a, b, c, d, e, f) = GHC.Tuple6 a b c d e f 182 Tuple (a, b, c, d, e, f, g) = GHC.Tuple7 a b c d e f g 183 Tuple (a, b, c, d, e, f, g, h) = GHC.Tuple8 a b c d e f g h 184 Tuple (a, b, c, d, e, f, g, h, i) = GHC.Tuple9 a b c d e f g h i 185 Tuple (GHC.MkSolo a) = GHC.Tuple1 a