summaryrefslogtreecommitdiff
path: root/testsuite/tests/perf/compiler/CoOpt_Singletons.hs
blob: 593d1e45260561c6439b8b72794e1d5d3da1d19f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE NoNamedWildCards #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneKindSignatures #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}

{-# LANGUAGE Haskell2010 #-}

{-# OPTIONS_GHC -Wno-unused-top-binds #-}

module CoOpt_Singletons where

-- base
import Data.Kind
  ( Type, Constraint )

{-------------------------------------------------------------------------------
This module extracts out everything needed to compile the following code
from Data.Foldable.Singletons in singletons-base:

$(singletonsOnly [d|
  deriving instance Foldable ((,) a)
  |])

Except that we replace (,) with the custom Tuple2 datatype defined below.
-}

type Apply :: (k1 ~> k2) -> k1 -> k2
type family Apply (f :: k1 ~> k2) (x :: k1) :: k2

type (@@) :: (k1 ~> k2) -> k1 -> k2
type a @@ b = Apply a b
infixl 9 @@

type TyFun :: Type -> Type -> Type
data TyFun :: Type -> Type -> Type

type (~>) :: Type -> Type -> Type
type a ~> b = TyFun a b -> Type
infixr 0 ~>

type SameKind :: k -> k -> Constraint
type SameKind (a :: k) (b :: k) = (() :: Constraint)

type Sing :: k -> Type
type family Sing :: k -> Type

type SLambda :: (k1 ~> k2) -> Type
newtype SLambda (f :: k1 ~> k2) =
  SLambda { applySing :: forall t. Sing t -> Sing (f @@ t) }
type instance Sing = SLambda

type SingFunction1 :: (a1 ~> b) -> Type
type SingFunction2 :: (a1 ~> a2 ~> b) -> Type
type SingFunction3 :: (a1 ~> a2 ~> a3 ~> b) -> Type

type SingFunction1 (f :: a1 ~> b) =
  forall t. Sing t -> Sing (f @@ t)
singFun1 :: forall f. SingFunction1 f -> Sing f
singFun1 f = SLambda f

type SingFunction2 (f :: a1 ~> a2 ~> b) =
  forall t1 t2. Sing t1 -> Sing t2 -> Sing (f @@ t1 @@ t2)
singFun2 :: forall f. SingFunction2 f -> Sing f
singFun2 f = SLambda (\x -> singFun1 (f x))

type SingFunction3 (f :: a1 ~> a2 ~> a3 ~> b) =
     forall t1 t2 t3.
     Sing t1 -> Sing t2 -> Sing t3
  -> Sing (f @@ t1 @@ t2 @@ t3)
singFun3 :: forall f. SingFunction3 f -> Sing f
singFun3 f = SLambda (\x -> singFun2 (f x))

------------------------------------------------------------

data Tuple2 a b = Tuple2 a b

type STuple2 :: Tuple2 a b -> Type
data STuple2 tup where
  STuple2 :: Sing a -> Sing b -> STuple2 ('Tuple2 a b)

type instance Sing @(Tuple2 a b) = STuple2

type Endo :: Type -> Type
newtype Endo a = Endo (a ~> a)
type SEndo :: Endo a -> Type
data SEndo e where
  SEndo :: Sing x -> SEndo ('Endo x)
type instance Sing = SEndo
type EndoSym0 :: (a ~> a) ~> Endo a
data EndoSym0 tf
type instance Apply EndoSym0 x = 'Endo x

{-
$(singletonsOnly [d|

  id                      :: a -> a
  id x                    =  x

  flip                    :: (a -> b -> c) -> b -> a -> c
  flip f x y              =  f y x

  (.)    :: (b -> c) -> (a -> b) -> a -> c
  (.) f g = \x -> f (g x)
  infixr 9 .

  ($!)                    :: (a -> b) -> a -> b
  f $! x                  = let {-!-}vx = x in f vx
  infixr 0 $!

 |])
-}

data Let6989586621679038864VxSym0 f6989586621679038862
  where
    Let6989586621679038864VxSym0KindInference :: SameKind (Apply Let6989586621679038864VxSym0 arg_a7yV) (Let6989586621679038864VxSym1 arg_a7yV) =>
                                                 Let6989586621679038864VxSym0 f6989586621679038862
type instance Apply Let6989586621679038864VxSym0 f6989586621679038862 = Let6989586621679038864VxSym1 f6989586621679038862
data Let6989586621679038864VxSym1 f6989586621679038862 x6989586621679038863
  where
    Let6989586621679038864VxSym1KindInference :: SameKind (Apply (Let6989586621679038864VxSym1 f6989586621679038862) arg_a7yV) (Let6989586621679038864VxSym2 f6989586621679038862 arg_a7yV) =>
                                                 Let6989586621679038864VxSym1 f6989586621679038862 x6989586621679038863
type instance Apply (Let6989586621679038864VxSym1 f6989586621679038862) x6989586621679038863 = Let6989586621679038864Vx f6989586621679038862 x6989586621679038863
type family Let6989586621679038864VxSym2 f6989586621679038862 x6989586621679038863 where
  Let6989586621679038864VxSym2 f6989586621679038862 x6989586621679038863 = Let6989586621679038864Vx f6989586621679038862 x6989586621679038863
type family Let6989586621679038864Vx f_a7yS x_a7yT where
  Let6989586621679038864Vx f_a7yS x_a7yT = x_a7yT
type family Lambda_6989586621679038878_a7z9 f_a7z5 g_a7z6 a_6989586621679038866_a7z7 x_a7za where
  Lambda_6989586621679038878_a7z9 f_a7z5 g_a7z6 a_6989586621679038866_a7z7 x_a7za = Apply f_a7z5 (Apply g_a7z6 x_a7za)
data Lambda_6989586621679038878Sym0 f6989586621679038875
  where
    Lambda_6989586621679038878Sym0KindInference :: SameKind (Apply Lambda_6989586621679038878Sym0 arg_a7zb) (Lambda_6989586621679038878Sym1 arg_a7zb) =>
                                                   Lambda_6989586621679038878Sym0 f6989586621679038875
type instance Apply Lambda_6989586621679038878Sym0 f6989586621679038875 = Lambda_6989586621679038878Sym1 f6989586621679038875
data Lambda_6989586621679038878Sym1 f6989586621679038875 g6989586621679038876
  where
    Lambda_6989586621679038878Sym1KindInference :: SameKind (Apply (Lambda_6989586621679038878Sym1 f6989586621679038875) arg_a7zb) (Lambda_6989586621679038878Sym2 f6989586621679038875 arg_a7zb) =>
                                                   Lambda_6989586621679038878Sym1 f6989586621679038875 g6989586621679038876
type instance Apply (Lambda_6989586621679038878Sym1 f6989586621679038875) g6989586621679038876 = Lambda_6989586621679038878Sym2 f6989586621679038875 g6989586621679038876
data Lambda_6989586621679038878Sym2 f6989586621679038875 g6989586621679038876 a_69895866216790388666989586621679038877
  where
    Lambda_6989586621679038878Sym2KindInference :: SameKind (Apply (Lambda_6989586621679038878Sym2 f6989586621679038875 g6989586621679038876) arg_a7zb) (Lambda_6989586621679038878Sym3 f6989586621679038875 g6989586621679038876 arg_a7zb) =>
                                                   Lambda_6989586621679038878Sym2 f6989586621679038875 g6989586621679038876 a_69895866216790388666989586621679038877
type instance Apply (Lambda_6989586621679038878Sym2 f6989586621679038875 g6989586621679038876) a_69895866216790388666989586621679038877 = Lambda_6989586621679038878Sym3 f6989586621679038875 g6989586621679038876 a_69895866216790388666989586621679038877
data Lambda_6989586621679038878Sym3 f6989586621679038875 g6989586621679038876 a_69895866216790388666989586621679038877 x6989586621679038880
  where
    Lambda_6989586621679038878Sym3KindInference :: SameKind (Apply (Lambda_6989586621679038878Sym3 f6989586621679038875 g6989586621679038876 a_69895866216790388666989586621679038877) arg_a7zb) (Lambda_6989586621679038878Sym4 f6989586621679038875 g6989586621679038876 a_69895866216790388666989586621679038877 arg_a7zb) =>
                                                   Lambda_6989586621679038878Sym3 f6989586621679038875 g6989586621679038876 a_69895866216790388666989586621679038877 x6989586621679038880
type instance Apply (Lambda_6989586621679038878Sym3 f6989586621679038875 g6989586621679038876 a_69895866216790388666989586621679038877) x6989586621679038880 = Lambda_6989586621679038878_a7z9 f6989586621679038875 g6989586621679038876 a_69895866216790388666989586621679038877 x6989586621679038880
type family Lambda_6989586621679038878Sym4 f6989586621679038875 g6989586621679038876 a_69895866216790388666989586621679038877 x6989586621679038880 where
  Lambda_6989586621679038878Sym4 f6989586621679038875 g6989586621679038876 a_69895866216790388666989586621679038877 x6989586621679038880 = Lambda_6989586621679038878_a7z9 f6989586621679038875 g6989586621679038876 a_69895866216790388666989586621679038877 x6989586621679038880
type ($!@#@$) :: (~>) ((~>) a_a7yq b_a7yr) ((~>) a_a7yq b_a7yr)
data ($!@#@$) :: (~>) ((~>) a_a7yq b_a7yr) ((~>) a_a7yq b_a7yr)
  where
    (:$!@#@$###) :: SameKind (Apply ($!@#@$) arg_a7yP) (($!@#@$$) arg_a7yP) =>
                    ($!@#@$) a6989586621679038860
type instance Apply ($!@#@$) a6989586621679038860 = ($!@#@$$) a6989586621679038860
infixr 0 $!@#@$
type ($!@#@$$) :: (~>) a_a7yq b_a7yr -> (~>) a_a7yq b_a7yr
data ($!@#@$$) (a6989586621679038860 :: (~>) a_a7yq b_a7yr) :: (~>) a_a7yq b_a7yr
  where
    (:$!@#@$$###) :: SameKind (Apply (($!@#@$$) a6989586621679038860) arg_a7yP) (($!@#@$$$) a6989586621679038860 arg_a7yP) =>
                     ($!@#@$$) a6989586621679038860 a6989586621679038861
type instance Apply (($!@#@$$) a6989586621679038860) a6989586621679038861 = ($!) a6989586621679038860 a6989586621679038861
infixr 0 $!@#@$$
type ($!@#@$$$) :: (~>) a_a7yq b_a7yr -> a_a7yq -> b_a7yr
type family ($!@#@$$$) (a6989586621679038860 :: (~>) a_a7yq b_a7yr) (a6989586621679038861 :: a_a7yq) :: b_a7yr where
  ($!@#@$$$) a6989586621679038860 a6989586621679038861 = ($!) a6989586621679038860 a6989586621679038861
infixr 0 $!@#@$$$
type (.@#@$) :: (~>) ((~>) b_a7ys c_a7yt) ((~>) ((~>) a_a7yu b_a7ys) ((~>) a_a7yu c_a7yt))
data (.@#@$) :: (~>) ((~>) b_a7ys c_a7yt) ((~>) ((~>) a_a7yu b_a7ys) ((~>) a_a7yu c_a7yt))
  where
    (:.@#@$###) :: SameKind (Apply (.@#@$) arg_a7z1) ((.@#@$$) arg_a7z1) =>
                   (.@#@$) a6989586621679038872
type instance Apply (.@#@$) a6989586621679038872 = (.@#@$$) a6989586621679038872
infixr 9 .@#@$
type (.@#@$$) :: (~>) b_a7ys c_a7yt
                 -> (~>) ((~>) a_a7yu b_a7ys) ((~>) a_a7yu c_a7yt)
data (.@#@$$) (a6989586621679038872 :: (~>) b_a7ys c_a7yt) :: (~>) ((~>) a_a7yu b_a7ys) ((~>) a_a7yu c_a7yt)
  where
    (:.@#@$$###) :: SameKind (Apply ((.@#@$$) a6989586621679038872) arg_a7z1) ((.@#@$$$) a6989586621679038872 arg_a7z1) =>
                    (.@#@$$) a6989586621679038872 a6989586621679038873
type instance Apply ((.@#@$$) a6989586621679038872) a6989586621679038873 = (.@#@$$$) a6989586621679038872 a6989586621679038873
infixr 9 .@#@$$
type (.@#@$$$) :: (~>) b_a7ys c_a7yt
                  -> (~>) a_a7yu b_a7ys -> (~>) a_a7yu c_a7yt
data (.@#@$$$) (a6989586621679038872 :: (~>) b_a7ys c_a7yt) (a6989586621679038873 :: (~>) a_a7yu b_a7ys) :: (~>) a_a7yu c_a7yt
  where
    (:.@#@$$$###) :: SameKind (Apply ((.@#@$$$) a6989586621679038872 a6989586621679038873) arg_a7z1) ((.@#@$$$$) a6989586621679038872 a6989586621679038873 arg_a7z1) =>
                     (.@#@$$$) a6989586621679038872 a6989586621679038873 a6989586621679038874
type instance Apply ((.@#@$$$) a6989586621679038872 a6989586621679038873) a6989586621679038874 = (.) a6989586621679038872 a6989586621679038873 a6989586621679038874
infixr 9 .@#@$$$
type (.@#@$$$$) :: (~>) b_a7ys c_a7yt
                   -> (~>) a_a7yu b_a7ys -> a_a7yu -> c_a7yt
type family (.@#@$$$$) (a6989586621679038872 :: (~>) b_a7ys c_a7yt) (a6989586621679038873 :: (~>) a_a7yu b_a7ys) (a6989586621679038874 :: a_a7yu) :: c_a7yt where
  (.@#@$$$$) a6989586621679038872 a6989586621679038873 a6989586621679038874 = (.) a6989586621679038872 a6989586621679038873 a6989586621679038874
infixr 9 .@#@$$$$
type FlipSym0 :: (~>) ((~>) a_a7yv ((~>) b_a7yw c_a7yx)) ((~>) b_a7yw ((~>) a_a7yv c_a7yx))
data FlipSym0 :: (~>) ((~>) a_a7yv ((~>) b_a7yw c_a7yx)) ((~>) b_a7yw ((~>) a_a7yv c_a7yx))
  where
    FlipSym0KindInference :: SameKind (Apply FlipSym0 arg_a7zf) (FlipSym1 arg_a7zf) =>
                             FlipSym0 a6989586621679038886
type instance Apply FlipSym0 a6989586621679038886 = FlipSym1 a6989586621679038886
type FlipSym1 :: (~>) a_a7yv ((~>) b_a7yw c_a7yx)
                 -> (~>) b_a7yw ((~>) a_a7yv c_a7yx)
data FlipSym1 (a6989586621679038886 :: (~>) a_a7yv ((~>) b_a7yw c_a7yx)) :: (~>) b_a7yw ((~>) a_a7yv c_a7yx)
  where
    FlipSym1KindInference :: SameKind (Apply (FlipSym1 a6989586621679038886) arg_a7zf) (FlipSym2 a6989586621679038886 arg_a7zf) =>
                             FlipSym1 a6989586621679038886 a6989586621679038887
type instance Apply (FlipSym1 a6989586621679038886) a6989586621679038887 = FlipSym2 a6989586621679038886 a6989586621679038887
type FlipSym2 :: (~>) a_a7yv ((~>) b_a7yw c_a7yx)
                 -> b_a7yw -> (~>) a_a7yv c_a7yx
data FlipSym2 (a6989586621679038886 :: (~>) a_a7yv ((~>) b_a7yw c_a7yx)) (a6989586621679038887 :: b_a7yw) :: (~>) a_a7yv c_a7yx
  where
    FlipSym2KindInference :: SameKind (Apply (FlipSym2 a6989586621679038886 a6989586621679038887) arg_a7zf) (FlipSym3 a6989586621679038886 a6989586621679038887 arg_a7zf) =>
                             FlipSym2 a6989586621679038886 a6989586621679038887 a6989586621679038888
type instance Apply (FlipSym2 a6989586621679038886 a6989586621679038887) a6989586621679038888 = Flip a6989586621679038886 a6989586621679038887 a6989586621679038888
type FlipSym3 :: (~>) a_a7yv ((~>) b_a7yw c_a7yx)
                 -> b_a7yw -> a_a7yv -> c_a7yx
type family FlipSym3 (a6989586621679038886 :: (~>) a_a7yv ((~>) b_a7yw c_a7yx)) (a6989586621679038887 :: b_a7yw) (a6989586621679038888 :: a_a7yv) :: c_a7yx where
  FlipSym3 a6989586621679038886 a6989586621679038887 a6989586621679038888 = Flip a6989586621679038886 a6989586621679038887 a6989586621679038888
type IdSym0 :: (~>) a_a7yy a_a7yy
data IdSym0 :: (~>) a_a7yy a_a7yy
  where
    IdSym0KindInference :: SameKind (Apply IdSym0 arg_a7zn) (IdSym1 arg_a7zn) =>
                           IdSym0 a6989586621679038894
type instance Apply IdSym0 a6989586621679038894 = Id a6989586621679038894
type IdSym1 :: a_a7yy -> a_a7yy
type family IdSym1 (a6989586621679038894 :: a_a7yy) :: a_a7yy where
  IdSym1 a6989586621679038894 = Id a6989586621679038894
type ($!) :: (~>) a_a7yq b_a7yr -> a_a7yq -> b_a7yr
type family ($!) (a_a7yN :: (~>) a_a7yq b_a7yr) (a_a7yO :: a_a7yq) :: b_a7yr where
  ($!) f_a7yS x_a7yT = Apply f_a7yS (Let6989586621679038864VxSym2 f_a7yS x_a7yT)
type (.) :: (~>) b_a7ys c_a7yt
            -> (~>) a_a7yu b_a7ys -> a_a7yu -> c_a7yt
type family (.) (a_a7yY :: (~>) b_a7ys c_a7yt) (a_a7yZ :: (~>) a_a7yu b_a7ys) (a_a7z0 :: a_a7yu) :: c_a7yt where
  (.) f_a7z5 g_a7z6 a_6989586621679038866_a7z7 = Apply (Apply (Apply (Apply Lambda_6989586621679038878Sym0 f_a7z5) g_a7z6) a_6989586621679038866_a7z7) a_6989586621679038866_a7z7
type Flip :: (~>) a_a7yv ((~>) b_a7yw c_a7yx)
             -> b_a7yw -> a_a7yv -> c_a7yx
type family Flip (a_a7zc :: (~>) a_a7yv ((~>) b_a7yw c_a7yx)) (a_a7zd :: b_a7yw) (a_a7ze :: a_a7yv) :: c_a7yx where
  Flip f_a7zj x_a7zk y_a7zl = Apply (Apply f_a7zj y_a7zl) x_a7zk
type Id :: a_a7yy -> a_a7yy
type family Id (a_a7zm :: a_a7yy) :: a_a7yy where
  Id x_a7zp = x_a7zp
infixr 0 $!
infixr 9 .
infixr 0 %$!
infixr 9 %.
(%$!) ::
  forall a_a7yq
         b_a7yr
         (t_a7zq :: (~>) a_a7yq b_a7yr)
         (t_a7zr :: a_a7yq). Sing t_a7zq
                             -> Sing t_a7zr
                                -> Sing (Apply (Apply ($!@#@$) t_a7zq) t_a7zr :: b_a7yr)
(%.) ::
  forall b_a7ys
         c_a7yt
         a_a7yu
         (t_a7zv :: (~>) b_a7ys c_a7yt)
         (t_a7zw :: (~>) a_a7yu b_a7ys)
         (t_a7zx :: a_a7yu). Sing t_a7zv
                             -> Sing t_a7zw
                                -> Sing t_a7zx
                                   -> Sing (Apply (Apply (Apply (.@#@$) t_a7zv) t_a7zw) t_a7zx :: c_a7yt)
sFlip ::
  forall a_a7yv
         b_a7yw
         c_a7yx
         (t_a7zF :: (~>) a_a7yv ((~>) b_a7yw c_a7yx))
         (t_a7zG :: b_a7yw)
         (t_a7zH :: a_a7yv). Sing t_a7zF
                             -> Sing t_a7zG
                                -> Sing t_a7zH
                                   -> Sing (Apply (Apply (Apply FlipSym0 t_a7zF) t_a7zG) t_a7zH :: c_a7yx)
sId ::
  forall a_a7yy (t_a7zP :: a_a7yy). Sing t_a7zP
                                    -> Sing (Apply IdSym0 t_a7zP :: a_a7yy)
(%$!) (sF :: Sing f_a7yS) (sX :: Sing x_a7yT)
  = let
      sVx :: Sing @_ (Let6989586621679038864VxSym2 f_a7yS x_a7yT)
      sVx = sX
    in (applySing sF) sVx
(%.)
  (sF :: Sing f_a7z5)
  (sG :: Sing g_a7z6)
  (sA_6989586621679038866 :: Sing a_6989586621679038866_a7z7)
  = (applySing
       ((singFun1
           @(Apply (Apply (Apply Lambda_6989586621679038878Sym0 f_a7z5) g_a7z6) a_6989586621679038866_a7z7))
          (\ sX
             -> case sX of
                  (_ :: Sing x_a7za) -> (applySing sF) ((applySing sG) sX))))
      sA_6989586621679038866
sFlip (sF :: Sing f_a7zj) (sX :: Sing x_a7zk) (sY :: Sing y_a7zl)
  = (applySing ((applySing sF) sY)) sX
sId (sX :: Sing x_a7zp) = sX

------------------------------------------------------------

newtype Dual a = Dual { getDual :: a }

{-
$(genSingletons [''Dual])
-}

type DualSym0 :: forall (a_a5fi :: Type). (~>) a_a5fi (Dual (a_a5fi :: Type))
data DualSym0 :: (~>) a_a5fi (Dual (a_a5fi :: Type))
  where
    DualSym0KindInference :: SameKind (Apply DualSym0 arg_a9sh) (DualSym1 arg_a9sh) =>
                             DualSym0 a6989586621679046142
type instance Apply DualSym0 a6989586621679046142 = 'Dual a6989586621679046142
type DualSym1 :: forall (a_a5fi :: Type). a_a5fi
                                          -> Dual (a_a5fi :: Type)
type family DualSym1 (a6989586621679046142 :: a_a5fi) :: Dual (a_a5fi :: Type) where
  DualSym1 a6989586621679046142 = 'Dual a6989586621679046142
type GetDualSym0 :: forall (a_a5fi :: Type). (~>) (Dual (a_a5fi :: Type)) a_a5fi
data GetDualSym0 :: (~>) (Dual (a_a5fi :: Type)) a_a5fi
  where
    GetDualSym0KindInference :: SameKind (Apply GetDualSym0 arg_a9sk) (GetDualSym1 arg_a9sk) =>
                                GetDualSym0 a6989586621679046145
type instance Apply GetDualSym0 a6989586621679046145 = GetDual a6989586621679046145
type GetDualSym1 :: forall (a_a5fi :: Type). Dual (a_a5fi :: Type)
                                             -> a_a5fi
type family GetDualSym1 (a6989586621679046145 :: Dual (a_a5fi :: Type)) :: a_a5fi where
  GetDualSym1 a6989586621679046145 = GetDual a6989586621679046145
type GetDual :: forall (a_a5fi :: Type). Dual (a_a5fi :: Type)
                                         -> a_a5fi
type family GetDual (a_a9sj :: Dual (a_a5fi :: Type)) :: a_a5fi where
  GetDual ('Dual field_a9sm) = field_a9sm
sGetDual ::
  forall (a_a5fi :: Type)
         (t_a9sn :: Dual (a_a5fi :: Type)). Sing t_a9sn
                                            -> Sing (Apply GetDualSym0 t_a9sn :: a_a5fi)
sGetDual (SDual (sField :: Sing field_a9sm)) = sField
type SDual :: forall (a_a5fi :: Type). Dual a_a5fi -> Type
data SDual :: forall (a_a5fi :: Type). Dual a_a5fi -> Type
  where
    SDual :: forall (a_a5fi :: Type) (n_a9sq :: a_a5fi).
             (Sing n_a9sq) -> SDual ('Dual n_a9sq :: Dual (a_a5fi :: Type))
type instance Sing @(Dual a_a5fi) = SDual

{-
$(singletonsOnly [d|
  class Semigroup a where
    (<>) :: a -> a -> a

  class Semigroup a => Monoid a where
        mempty  :: a

        mappend :: a -> a -> a
        mappend = (<>)

  instance Semigroup a => Semigroup (Dual a) where
    Dual a <> Dual b = Dual (b <> a)

  instance Monoid a => Monoid (Dual a) where
          mempty = Dual mempty
  |])
-}

type (<>@#@$) :: forall a_a9GJ. (~>) a_a9GJ ((~>) a_a9GJ a_a9GJ)
data (<>@#@$) :: (~>) a_a9GJ ((~>) a_a9GJ a_a9GJ)
  where
    (:<>@#@$###) :: SameKind (Apply (<>@#@$) arg_a9GZ) ((<>@#@$$) arg_a9GZ) =>
                    (<>@#@$) a6989586621679047054
type instance Apply (<>@#@$) a6989586621679047054 = (<>@#@$$) a6989586621679047054
type (<>@#@$$) :: forall a_a9GJ. a_a9GJ -> (~>) a_a9GJ a_a9GJ
data (<>@#@$$) (a6989586621679047054 :: a_a9GJ) :: (~>) a_a9GJ a_a9GJ
  where
    (:<>@#@$$###) :: SameKind (Apply ((<>@#@$$) a6989586621679047054) arg_a9GZ) ((<>@#@$$$) a6989586621679047054 arg_a9GZ) =>
                     (<>@#@$$) a6989586621679047054 a6989586621679047055
type instance Apply ((<>@#@$$) a6989586621679047054) a6989586621679047055 = (<>) a6989586621679047054 a6989586621679047055
type (<>@#@$$$) :: forall a_a9GJ. a_a9GJ -> a_a9GJ -> a_a9GJ
type family (<>@#@$$$) (a6989586621679047054 :: a_a9GJ) (a6989586621679047055 :: a_a9GJ) :: a_a9GJ where
  (<>@#@$$$) a6989586621679047054 a6989586621679047055 = (<>) a6989586621679047054 a6989586621679047055
class PSemigroup a_a9GJ where
  type family (<>) (arg_a9GX :: a_a9GJ) (arg_a9GY :: a_a9GJ) :: a_a9GJ
type MemptySym0 :: forall a_a9GK. a_a9GK
type family MemptySym0 :: a_a9GK where
  MemptySym0 = Mempty
type MappendSym0 :: forall a_a9GK. (~>) a_a9GK ((~>) a_a9GK a_a9GK)
data MappendSym0 :: (~>) a_a9GK ((~>) a_a9GK a_a9GK)
  where
    MappendSym0KindInference :: SameKind (Apply MappendSym0 arg_a9H5) (MappendSym1 arg_a9H5) =>
                                MappendSym0 a6989586621679047060
type instance Apply MappendSym0 a6989586621679047060 = MappendSym1 a6989586621679047060
type MappendSym1 :: forall a_a9GK. a_a9GK -> (~>) a_a9GK a_a9GK
data MappendSym1 (a6989586621679047060 :: a_a9GK) :: (~>) a_a9GK a_a9GK
  where
    MappendSym1KindInference :: SameKind (Apply (MappendSym1 a6989586621679047060) arg_a9H5) (MappendSym2 a6989586621679047060 arg_a9H5) =>
                                MappendSym1 a6989586621679047060 a6989586621679047061
type instance Apply (MappendSym1 a6989586621679047060) a6989586621679047061 = Mappend a6989586621679047060 a6989586621679047061
type MappendSym2 :: forall a_a9GK. a_a9GK -> a_a9GK -> a_a9GK
type family MappendSym2 (a6989586621679047060 :: a_a9GK) (a6989586621679047061 :: a_a9GK) :: a_a9GK where
  MappendSym2 a6989586621679047060 a6989586621679047061 = Mappend a6989586621679047060 a6989586621679047061
type Mappend_6989586621679047064 :: a_a9GK -> a_a9GK -> a_a9GK
type family Mappend_6989586621679047064 (a_a9Hg :: a_a9GK) (a_a9Hh :: a_a9GK) :: a_a9GK where
  Mappend_6989586621679047064 a_6989586621679047066_a9Hl a_6989586621679047068_a9Hm = Apply (Apply (<>@#@$) a_6989586621679047066_a9Hl) a_6989586621679047068_a9Hm
type Mappend_6989586621679047064Sym0 :: (~>) a_a9GK ((~>) a_a9GK a_a9GK)
data Mappend_6989586621679047064Sym0 :: (~>) a_a9GK ((~>) a_a9GK a_a9GK)
  where
    Mappend_6989586621679047064Sym0KindInference :: SameKind (Apply Mappend_6989586621679047064Sym0 arg_a9Hi) (Mappend_6989586621679047064Sym1 arg_a9Hi) =>
                                                    Mappend_6989586621679047064Sym0 a6989586621679047073
type instance Apply Mappend_6989586621679047064Sym0 a6989586621679047073 = Mappend_6989586621679047064Sym1 a6989586621679047073
type Mappend_6989586621679047064Sym1 :: a_a9GK
                                        -> (~>) a_a9GK a_a9GK
data Mappend_6989586621679047064Sym1 (a6989586621679047073 :: a_a9GK) :: (~>) a_a9GK a_a9GK
  where
    Mappend_6989586621679047064Sym1KindInference :: SameKind (Apply (Mappend_6989586621679047064Sym1 a6989586621679047073) arg_a9Hi) (Mappend_6989586621679047064Sym2 a6989586621679047073 arg_a9Hi) =>
                                                    Mappend_6989586621679047064Sym1 a6989586621679047073 a6989586621679047074
type instance Apply (Mappend_6989586621679047064Sym1 a6989586621679047073) a6989586621679047074 = Mappend_6989586621679047064 a6989586621679047073 a6989586621679047074
type Mappend_6989586621679047064Sym2 :: a_a9GK -> a_a9GK -> a_a9GK
type family Mappend_6989586621679047064Sym2 (a6989586621679047073 :: a_a9GK) (a6989586621679047074 :: a_a9GK) :: a_a9GK where
  Mappend_6989586621679047064Sym2 a6989586621679047073 a6989586621679047074 = Mappend_6989586621679047064 a6989586621679047073 a6989586621679047074
class PMonoid a_a9GK where
  type family Mempty :: a_a9GK
  type family Mappend (arg_a9H3 :: a_a9GK) (arg_a9H4 :: a_a9GK) :: a_a9GK
  type Mappend a_a9H8 a_a9H9 = Apply (Apply Mappend_6989586621679047064Sym0 a_a9H8) a_a9H9
type TFHelper_6989586621679047079 :: Dual a_a9GL
                                     -> Dual a_a9GL -> Dual a_a9GL
type family TFHelper_6989586621679047079 (a_a9Hr :: Dual a_a9GL) (a_a9Hs :: Dual a_a9GL) :: Dual a_a9GL where
  TFHelper_6989586621679047079 ('Dual a_a9Hw) ('Dual b_a9Hx) = Apply DualSym0 (Apply (Apply (<>@#@$) b_a9Hx) a_a9Hw)
type TFHelper_6989586621679047079Sym0 :: (~>) (Dual a_a9GL) ((~>) (Dual a_a9GL) (Dual a_a9GL))
data TFHelper_6989586621679047079Sym0 :: (~>) (Dual a_a9GL) ((~>) (Dual a_a9GL) (Dual a_a9GL))
  where
    TFHelper_6989586621679047079Sym0KindInference :: SameKind (Apply TFHelper_6989586621679047079Sym0 arg_a9Ht) (TFHelper_6989586621679047079Sym1 arg_a9Ht) =>
                                                     TFHelper_6989586621679047079Sym0 a6989586621679047084
type instance Apply TFHelper_6989586621679047079Sym0 a6989586621679047084 = TFHelper_6989586621679047079Sym1 a6989586621679047084
type TFHelper_6989586621679047079Sym1 :: Dual a_a9GL
                                         -> (~>) (Dual a_a9GL) (Dual a_a9GL)
data TFHelper_6989586621679047079Sym1 (a6989586621679047084 :: Dual a_a9GL) :: (~>) (Dual a_a9GL) (Dual a_a9GL)
  where
    TFHelper_6989586621679047079Sym1KindInference :: SameKind (Apply (TFHelper_6989586621679047079Sym1 a6989586621679047084) arg_a9Ht) (TFHelper_6989586621679047079Sym2 a6989586621679047084 arg_a9Ht) =>
                                                     TFHelper_6989586621679047079Sym1 a6989586621679047084 a6989586621679047085
type instance Apply (TFHelper_6989586621679047079Sym1 a6989586621679047084) a6989586621679047085 = TFHelper_6989586621679047079 a6989586621679047084 a6989586621679047085
type TFHelper_6989586621679047079Sym2 :: Dual a_a9GL
                                         -> Dual a_a9GL -> Dual a_a9GL
type family TFHelper_6989586621679047079Sym2 (a6989586621679047084 :: Dual a_a9GL) (a6989586621679047085 :: Dual a_a9GL) :: Dual a_a9GL where
  TFHelper_6989586621679047079Sym2 a6989586621679047084 a6989586621679047085 = TFHelper_6989586621679047079 a6989586621679047084 a6989586621679047085
instance PSemigroup (Dual a_a9GL) where
  type (<>) a_a9Hn a_a9Ho = Apply (Apply TFHelper_6989586621679047079Sym0 a_a9Hn) a_a9Ho
type Mempty_6989586621679047088 :: Dual a_a9GO
type family Mempty_6989586621679047088 :: Dual a_a9GO where
  Mempty_6989586621679047088 = Apply DualSym0 MemptySym0
type Mempty_6989586621679047088Sym0 :: Dual a_a9GO
type family Mempty_6989586621679047088Sym0 :: Dual a_a9GO where
  Mempty_6989586621679047088Sym0 = Mempty_6989586621679047088
instance PMonoid (Dual a_a9GO) where
  type Mempty = Mempty_6989586621679047088Sym0
class SSemigroup a_a9GJ where
  (%<>) ::
    forall (t_a9HB :: a_a9GJ) (t_a9HC :: a_a9GJ). Sing t_a9HB
                                                  -> Sing t_a9HC
                                                     -> Sing (Apply (Apply (<>@#@$) t_a9HB) t_a9HC :: a_a9GJ)
class SSemigroup a_a9GK => SMonoid a_a9GK where
  sMempty :: Sing (MemptySym0 :: a_a9GK)
  sMappend ::
    forall (t_a9HG :: a_a9GK) (t_a9HH :: a_a9GK). Sing t_a9HG
                                                  -> Sing t_a9HH
                                                     -> Sing (Apply (Apply MappendSym0 t_a9HG) t_a9HH :: a_a9GK)
  default sMappend ::
            forall (t_a9HG :: a_a9GK)
                   (t_a9HH :: a_a9GK). ((Apply (Apply MappendSym0 t_a9HG) t_a9HH :: a_a9GK)
                                        ~
                                        Apply (Apply Mappend_6989586621679047064Sym0 t_a9HG) t_a9HH) =>
                                       Sing t_a9HG
                                       -> Sing t_a9HH
                                          -> Sing (Apply (Apply MappendSym0 t_a9HG) t_a9HH :: a_a9GK)
  sMappend
    (sA_6989586621679047066 :: Sing a_6989586621679047066_a9Hl)
    (sA_6989586621679047068 :: Sing a_6989586621679047068_a9Hm)
    = (applySing
         ((applySing ((singFun2 @(<>@#@$)) (%<>))) sA_6989586621679047066))
        sA_6989586621679047068
instance SSemigroup a_a9GL => SSemigroup (Dual a_a9GL) where
  (%<>) ::
    forall (t_a9HN :: Dual a_a9GL) (t_a9HO :: Dual a_a9GL). Sing t_a9HN
                                                            -> Sing t_a9HO
                                                               -> Sing (Apply (Apply (<>@#@$) t_a9HN) t_a9HO :: Dual a_a9GL)
  (%<>) (SDual (sA :: Sing a_a9Hw)) (SDual (sB :: Sing b_a9Hx))
    = (applySing ((singFun1 @DualSym0) SDual))
        ((applySing ((applySing ((singFun2 @(<>@#@$)) (%<>))) sB)) sA)
instance SMonoid a_a9GO => SMonoid (Dual a_a9GO) where
  sMempty :: Sing (MemptySym0 :: Dual a_a9GO)
  sMempty = (applySing ((singFun1 @DualSym0) SDual)) sMempty

{-
$(singletonsOnly [d|
  appEndo :: Endo a -> (a -> a)
  appEndo (Endo x) = x

  instance Semigroup (Endo a) where
          Endo x <> Endo y = Endo (x . y)

  instance Monoid (Endo a) where
          mempty = Endo id
  |])
-}

type AppEndoSym0 :: (~>) (Endo a_agCh) ((~>) a_agCh a_agCh)
data AppEndoSym0 :: (~>) (Endo a_agCh) ((~>) a_agCh a_agCh)
  where
    AppEndoSym0KindInference :: SameKind (Apply AppEndoSym0 arg_agUE) (AppEndoSym1 arg_agUE) =>
                                AppEndoSym0 a6989586621679074809
type instance Apply AppEndoSym0 a6989586621679074809 = AppEndoSym1 a6989586621679074809
type AppEndoSym1 :: Endo a_agCh -> (~>) a_agCh a_agCh
data AppEndoSym1 (a6989586621679074809 :: Endo a_agCh) :: (~>) a_agCh a_agCh
  where
    AppEndoSym1KindInference :: SameKind (Apply (AppEndoSym1 a6989586621679074809) arg_agUE) (AppEndoSym2 a6989586621679074809 arg_agUE) =>
                                AppEndoSym1 a6989586621679074809 a6989586621679074810
type instance Apply (AppEndoSym1 a6989586621679074809) a6989586621679074810 = AppEndo a6989586621679074809 a6989586621679074810
type AppEndoSym2 :: Endo a_agCh -> a_agCh -> a_agCh
type family AppEndoSym2 (a6989586621679074809 :: Endo a_agCh) (a6989586621679074810 :: a_agCh) :: a_agCh where
  AppEndoSym2 a6989586621679074809 a6989586621679074810 = AppEndo a6989586621679074809 a6989586621679074810
type AppEndo :: Endo a_agCh -> a_agCh -> a_agCh
type family AppEndo (a_agUC :: Endo a_agCh) (a_agUD :: a_agCh) :: a_agCh where
  AppEndo ('Endo x_agUH) a_6989586621679074804_agUI = Apply x_agUH a_6989586621679074804_agUI
type TFHelper_6989586621679075091 :: Endo a_agCk
                                     -> Endo a_agCk -> Endo a_agCk
type family TFHelper_6989586621679075091 (a_agZf :: Endo a_agCk) (a_agZg :: Endo a_agCk) :: Endo a_agCk where
  TFHelper_6989586621679075091 ('Endo x_agZk) ('Endo y_agZl) = Apply EndoSym0 (Apply (Apply (.@#@$) x_agZk) y_agZl)
type TFHelper_6989586621679075091Sym0 :: (~>) (Endo a_agCk) ((~>) (Endo a_agCk) (Endo a_agCk))
data TFHelper_6989586621679075091Sym0 :: (~>) (Endo a_agCk) ((~>) (Endo a_agCk) (Endo a_agCk))
  where
    TFHelper_6989586621679075091Sym0KindInference :: SameKind (Apply TFHelper_6989586621679075091Sym0 arg_agZh) (TFHelper_6989586621679075091Sym1 arg_agZh) =>
                                                     TFHelper_6989586621679075091Sym0 a6989586621679075096
type instance Apply TFHelper_6989586621679075091Sym0 a6989586621679075096 = TFHelper_6989586621679075091Sym1 a6989586621679075096
type TFHelper_6989586621679075091Sym1 :: Endo a_agCk
                                         -> (~>) (Endo a_agCk) (Endo a_agCk)
data TFHelper_6989586621679075091Sym1 (a6989586621679075096 :: Endo a_agCk) :: (~>) (Endo a_agCk) (Endo a_agCk)
  where
    TFHelper_6989586621679075091Sym1KindInference :: SameKind (Apply (TFHelper_6989586621679075091Sym1 a6989586621679075096) arg_agZh) (TFHelper_6989586621679075091Sym2 a6989586621679075096 arg_agZh) =>
                                                     TFHelper_6989586621679075091Sym1 a6989586621679075096 a6989586621679075097
type instance Apply (TFHelper_6989586621679075091Sym1 a6989586621679075096) a6989586621679075097 = TFHelper_6989586621679075091 a6989586621679075096 a6989586621679075097
type TFHelper_6989586621679075091Sym2 :: Endo a_agCk
                                         -> Endo a_agCk -> Endo a_agCk
type family TFHelper_6989586621679075091Sym2 (a6989586621679075096 :: Endo a_agCk) (a6989586621679075097 :: Endo a_agCk) :: Endo a_agCk where
  TFHelper_6989586621679075091Sym2 a6989586621679075096 a6989586621679075097 = TFHelper_6989586621679075091 a6989586621679075096 a6989586621679075097
instance PSemigroup (Endo a_agCk) where
  type (<>) a_agZb a_agZc = Apply (Apply TFHelper_6989586621679075091Sym0 a_agZb) a_agZc
type Mempty_6989586621679075313 :: Endo a_agCn
type family Mempty_6989586621679075313 :: Endo a_agCn where
  Mempty_6989586621679075313 = Apply EndoSym0 IdSym0
type Mempty_6989586621679075313Sym0 :: Endo a_agCn
type family Mempty_6989586621679075313Sym0 :: Endo a_agCn where
  Mempty_6989586621679075313Sym0 = Mempty_6989586621679075313
instance PMonoid (Endo a_agCn) where
  type Mempty = Mempty_6989586621679075313Sym0
sAppEndo ::
  forall a_agCh
         (t_ah2Q :: Endo a_agCh)
         (t_ah2R :: a_agCh). Sing t_ah2Q
                             -> Sing t_ah2R
                                -> Sing (Apply (Apply AppEndoSym0 t_ah2Q) t_ah2R :: a_agCh)
sAppEndo
  (SEndo (sX :: Sing x_agUH))
  (sA_6989586621679074804 :: Sing a_6989586621679074804_agUI)
  = (applySing sX) sA_6989586621679074804
instance SSemigroup (Endo a_agCk) where
  (%<>) ::
    forall (t1_ih30 :: Endo a_agCk)
           (t2_ih31 :: Endo a_agCk). Sing t1_ih30
                                     -> Sing t2_ih31
                                        -> Sing (Apply (Apply ((<>@#@$) :: TyFun (Endo a_agCk) ((~>) (Endo a_agCk) (Endo a_agCk))
                                          -> Type) t1_ih30) t2_ih31)
  (%<>) (SEndo (sX :: Sing x_agZk)) (SEndo (sY :: Sing y_agZl))
    = (applySing ((singFun1 @EndoSym0) SEndo))
        ((applySing ((applySing ((singFun3 @(.@#@$)) (%.))) sX)) sY)
instance SMonoid (Endo a_agCn) where
  sMempty :: Sing (MemptySym0 :: Endo a_agCn)
  sMempty
    = (applySing ((singFun1 @EndoSym0) SEndo)) ((singFun1 @IdSym0) sId)

{-
$(singletonsOnly [d|

  class Foldable t where

      foldMap :: Monoid m => (a -> m) -> t a -> m
      foldr   :: (a -> b -> b) -> b -> t a -> b

      foldr' :: (a -> b -> b) -> b -> t a -> b
      foldr' f z0 xs = foldl f' id xs z0
        where f' k x z = k $! f x z

      foldl :: (b -> a -> b) -> b -> t a -> b
      foldl f z t = appEndo (getDual (foldMap (Dual . Endo . flip f) t)) z

  |])
-}

type FoldMapSym0 :: forall a_ahBz
                           m_ahBy
                           t_ahBx. (~>) ((~>) a_ahBz m_ahBy) ((~>) (t_ahBx a_ahBz) m_ahBy)
data FoldMapSym0 :: (~>) ((~>) a_ahBz m_ahBy) ((~>) (t_ahBx a_ahBz) m_ahBy)
  where
    FoldMapSym0KindInference :: SameKind (Apply FoldMapSym0 arg_ahBS) (FoldMapSym1 arg_ahBS) =>
                                FoldMapSym0 a6989586621679077489
type instance Apply FoldMapSym0 a6989586621679077489 = FoldMapSym1 a6989586621679077489
type FoldMapSym1 :: forall a_ahBz m_ahBy t_ahBx. (~>) a_ahBz m_ahBy
                                                 -> (~>) (t_ahBx a_ahBz) m_ahBy
data FoldMapSym1 (a6989586621679077489 :: (~>) a_ahBz m_ahBy) :: (~>) (t_ahBx a_ahBz) m_ahBy
  where
    FoldMapSym1KindInference :: SameKind (Apply (FoldMapSym1 a6989586621679077489) arg_ahBS) (FoldMapSym2 a6989586621679077489 arg_ahBS) =>
                                FoldMapSym1 a6989586621679077489 a6989586621679077490
type instance Apply (FoldMapSym1 a6989586621679077489) a6989586621679077490 = FoldMap a6989586621679077489 a6989586621679077490
type FoldMapSym2 :: forall a_ahBz m_ahBy t_ahBx. (~>) a_ahBz m_ahBy
                                                 -> t_ahBx a_ahBz -> m_ahBy
type family FoldMapSym2 (a6989586621679077489 :: (~>) a_ahBz m_ahBy) (a6989586621679077490 :: t_ahBx a_ahBz) :: m_ahBy where
  FoldMapSym2 a6989586621679077489 a6989586621679077490 = FoldMap a6989586621679077489 a6989586621679077490
type FoldrSym0 :: forall a_ahBA
                         b_ahBB
                         t_ahBx. (~>) ((~>) a_ahBA ((~>) b_ahBB b_ahBB)) ((~>) b_ahBB ((~>) (t_ahBx a_ahBA) b_ahBB))
data FoldrSym0 :: (~>) ((~>) a_ahBA ((~>) b_ahBB b_ahBB)) ((~>) b_ahBB ((~>) (t_ahBx a_ahBA) b_ahBB))
  where
    FoldrSym0KindInference :: SameKind (Apply FoldrSym0 arg_ahBY) (FoldrSym1 arg_ahBY) =>
                              FoldrSym0 a6989586621679077495
type instance Apply FoldrSym0 a6989586621679077495 = FoldrSym1 a6989586621679077495
type FoldrSym1 :: forall a_ahBA
                         b_ahBB
                         t_ahBx. (~>) a_ahBA ((~>) b_ahBB b_ahBB)
                                 -> (~>) b_ahBB ((~>) (t_ahBx a_ahBA) b_ahBB)
data FoldrSym1 (a6989586621679077495 :: (~>) a_ahBA ((~>) b_ahBB b_ahBB)) :: (~>) b_ahBB ((~>) (t_ahBx a_ahBA) b_ahBB)
  where
    FoldrSym1KindInference :: SameKind (Apply (FoldrSym1 a6989586621679077495) arg_ahBY) (FoldrSym2 a6989586621679077495 arg_ahBY) =>
                              FoldrSym1 a6989586621679077495 a6989586621679077496
type instance Apply (FoldrSym1 a6989586621679077495) a6989586621679077496 = FoldrSym2 a6989586621679077495 a6989586621679077496
type FoldrSym2 :: forall a_ahBA
                         b_ahBB
                         t_ahBx. (~>) a_ahBA ((~>) b_ahBB b_ahBB)
                                 -> b_ahBB -> (~>) (t_ahBx a_ahBA) b_ahBB
data FoldrSym2 (a6989586621679077495 :: (~>) a_ahBA ((~>) b_ahBB b_ahBB)) (a6989586621679077496 :: b_ahBB) :: (~>) (t_ahBx a_ahBA) b_ahBB
  where
    FoldrSym2KindInference :: SameKind (Apply (FoldrSym2 a6989586621679077495 a6989586621679077496) arg_ahBY) (FoldrSym3 a6989586621679077495 a6989586621679077496 arg_ahBY) =>
                              FoldrSym2 a6989586621679077495 a6989586621679077496 a6989586621679077497
type instance Apply (FoldrSym2 a6989586621679077495 a6989586621679077496) a6989586621679077497 = Foldr a6989586621679077495 a6989586621679077496 a6989586621679077497
type FoldrSym3 :: forall a_ahBA
                         b_ahBB
                         t_ahBx. (~>) a_ahBA ((~>) b_ahBB b_ahBB)
                                 -> b_ahBB -> t_ahBx a_ahBA -> b_ahBB
type family FoldrSym3 (a6989586621679077495 :: (~>) a_ahBA ((~>) b_ahBB b_ahBB)) (a6989586621679077496 :: b_ahBB) (a6989586621679077497 :: t_ahBx a_ahBA) :: b_ahBB where
  FoldrSym3 a6989586621679077495 a6989586621679077496 a6989586621679077497 = Foldr a6989586621679077495 a6989586621679077496 a6989586621679077497
type Foldr'Sym0 :: forall a_ahBC
                          b_ahBD
                          t_ahBx. (~>) ((~>) a_ahBC ((~>) b_ahBD b_ahBD)) ((~>) b_ahBD ((~>) (t_ahBx a_ahBC) b_ahBD))
data Foldr'Sym0 :: (~>) ((~>) a_ahBC ((~>) b_ahBD b_ahBD)) ((~>) b_ahBD ((~>) (t_ahBx a_ahBC) b_ahBD))
  where
    Foldr'Sym0KindInference :: SameKind (Apply Foldr'Sym0 arg_ahC5) (Foldr'Sym1 arg_ahC5) =>
                               Foldr'Sym0 a6989586621679077502
type instance Apply Foldr'Sym0 a6989586621679077502 = Foldr'Sym1 a6989586621679077502
type Foldr'Sym1 :: forall a_ahBC
                          b_ahBD
                          t_ahBx. (~>) a_ahBC ((~>) b_ahBD b_ahBD)
                                  -> (~>) b_ahBD ((~>) (t_ahBx a_ahBC) b_ahBD)
data Foldr'Sym1 (a6989586621679077502 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD)) :: (~>) b_ahBD ((~>) (t_ahBx a_ahBC) b_ahBD)
  where
    Foldr'Sym1KindInference :: SameKind (Apply (Foldr'Sym1 a6989586621679077502) arg_ahC5) (Foldr'Sym2 a6989586621679077502 arg_ahC5) =>
                               Foldr'Sym1 a6989586621679077502 a6989586621679077503
type instance Apply (Foldr'Sym1 a6989586621679077502) a6989586621679077503 = Foldr'Sym2 a6989586621679077502 a6989586621679077503
type Foldr'Sym2 :: forall a_ahBC
                          b_ahBD
                          t_ahBx. (~>) a_ahBC ((~>) b_ahBD b_ahBD)
                                  -> b_ahBD -> (~>) (t_ahBx a_ahBC) b_ahBD
data Foldr'Sym2 (a6989586621679077502 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD)) (a6989586621679077503 :: b_ahBD) :: (~>) (t_ahBx a_ahBC) b_ahBD
  where
    Foldr'Sym2KindInference :: SameKind (Apply (Foldr'Sym2 a6989586621679077502 a6989586621679077503) arg_ahC5) (Foldr'Sym3 a6989586621679077502 a6989586621679077503 arg_ahC5) =>
                               Foldr'Sym2 a6989586621679077502 a6989586621679077503 a6989586621679077504
type instance Apply (Foldr'Sym2 a6989586621679077502 a6989586621679077503) a6989586621679077504 = Foldr' a6989586621679077502 a6989586621679077503 a6989586621679077504
type Foldr'Sym3 :: forall a_ahBC
                          b_ahBD
                          t_ahBx. (~>) a_ahBC ((~>) b_ahBD b_ahBD)
                                  -> b_ahBD -> t_ahBx a_ahBC -> b_ahBD
type family Foldr'Sym3 (a6989586621679077502 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD)) (a6989586621679077503 :: b_ahBD) (a6989586621679077504 :: t_ahBx a_ahBC) :: b_ahBD where
  Foldr'Sym3 a6989586621679077502 a6989586621679077503 a6989586621679077504 = Foldr' a6989586621679077502 a6989586621679077503 a6989586621679077504
type FoldlSym0 :: forall b_ahBE
                         a_ahBF
                         t_ahBx. (~>) ((~>) b_ahBE ((~>) a_ahBF b_ahBE)) ((~>) b_ahBE ((~>) (t_ahBx a_ahBF) b_ahBE))
data FoldlSym0 :: (~>) ((~>) b_ahBE ((~>) a_ahBF b_ahBE)) ((~>) b_ahBE ((~>) (t_ahBx a_ahBF) b_ahBE))
  where
    FoldlSym0KindInference :: SameKind (Apply FoldlSym0 arg_ahCc) (FoldlSym1 arg_ahCc) =>
                              FoldlSym0 a6989586621679077509
type instance Apply FoldlSym0 a6989586621679077509 = FoldlSym1 a6989586621679077509
type FoldlSym1 :: forall b_ahBE
                         a_ahBF
                         t_ahBx. (~>) b_ahBE ((~>) a_ahBF b_ahBE)
                                 -> (~>) b_ahBE ((~>) (t_ahBx a_ahBF) b_ahBE)
data FoldlSym1 (a6989586621679077509 :: (~>) b_ahBE ((~>) a_ahBF b_ahBE)) :: (~>) b_ahBE ((~>) (t_ahBx a_ahBF) b_ahBE)
  where
    FoldlSym1KindInference :: SameKind (Apply (FoldlSym1 a6989586621679077509) arg_ahCc) (FoldlSym2 a6989586621679077509 arg_ahCc) =>
                              FoldlSym1 a6989586621679077509 a6989586621679077510
type instance Apply (FoldlSym1 a6989586621679077509) a6989586621679077510 = FoldlSym2 a6989586621679077509 a6989586621679077510
type FoldlSym2 :: forall b_ahBE
                         a_ahBF
                         t_ahBx. (~>) b_ahBE ((~>) a_ahBF b_ahBE)
                                 -> b_ahBE -> (~>) (t_ahBx a_ahBF) b_ahBE
data FoldlSym2 (a6989586621679077509 :: (~>) b_ahBE ((~>) a_ahBF b_ahBE)) (a6989586621679077510 :: b_ahBE) :: (~>) (t_ahBx a_ahBF) b_ahBE
  where
    FoldlSym2KindInference :: SameKind (Apply (FoldlSym2 a6989586621679077509 a6989586621679077510) arg_ahCc) (FoldlSym3 a6989586621679077509 a6989586621679077510 arg_ahCc) =>
                              FoldlSym2 a6989586621679077509 a6989586621679077510 a6989586621679077511
type instance Apply (FoldlSym2 a6989586621679077509 a6989586621679077510) a6989586621679077511 = Foldl a6989586621679077509 a6989586621679077510 a6989586621679077511
type FoldlSym3 :: forall b_ahBE
                         a_ahBF
                         t_ahBx. (~>) b_ahBE ((~>) a_ahBF b_ahBE)
                                 -> b_ahBE -> t_ahBx a_ahBF -> b_ahBE
type family FoldlSym3 (a6989586621679077509 :: (~>) b_ahBE ((~>) a_ahBF b_ahBE)) (a6989586621679077510 :: b_ahBE) (a6989586621679077511 :: t_ahBx a_ahBF) :: b_ahBE where
  FoldlSym3 a6989586621679077509 a6989586621679077510 a6989586621679077511 = Foldl a6989586621679077509 a6989586621679077510 a6989586621679077511
data Let6989586621679077527F'Sym0 f6989586621679077524
  where
    Let6989586621679077527F'Sym0KindInference :: SameKind (Apply Let6989586621679077527F'Sym0 arg_ahCz) (Let6989586621679077527F'Sym1 arg_ahCz) =>
                                                 Let6989586621679077527F'Sym0 f6989586621679077524
type instance Apply Let6989586621679077527F'Sym0 f6989586621679077524 = Let6989586621679077527F'Sym1 f6989586621679077524
data Let6989586621679077527F'Sym1 f6989586621679077524 z06989586621679077525
  where
    Let6989586621679077527F'Sym1KindInference :: SameKind (Apply (Let6989586621679077527F'Sym1 f6989586621679077524) arg_ahCz) (Let6989586621679077527F'Sym2 f6989586621679077524 arg_ahCz) =>
                                                 Let6989586621679077527F'Sym1 f6989586621679077524 z06989586621679077525
type instance Apply (Let6989586621679077527F'Sym1 f6989586621679077524) z06989586621679077525 = Let6989586621679077527F'Sym2 f6989586621679077524 z06989586621679077525
data Let6989586621679077527F'Sym2 f6989586621679077524 z06989586621679077525 xs6989586621679077526
  where
    Let6989586621679077527F'Sym2KindInference :: SameKind (Apply (Let6989586621679077527F'Sym2 f6989586621679077524 z06989586621679077525) arg_ahCz) (Let6989586621679077527F'Sym3 f6989586621679077524 z06989586621679077525 arg_ahCz) =>
                                                 Let6989586621679077527F'Sym2 f6989586621679077524 z06989586621679077525 xs6989586621679077526
type instance Apply (Let6989586621679077527F'Sym2 f6989586621679077524 z06989586621679077525) xs6989586621679077526 = Let6989586621679077527F'Sym3 f6989586621679077524 z06989586621679077525 xs6989586621679077526
data Let6989586621679077527F'Sym3 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528
  where
    Let6989586621679077527F'Sym3KindInference :: SameKind (Apply (Let6989586621679077527F'Sym3 f6989586621679077524 z06989586621679077525 xs6989586621679077526) arg_ahCz) (Let6989586621679077527F'Sym4 f6989586621679077524 z06989586621679077525 xs6989586621679077526 arg_ahCz) =>
                                                 Let6989586621679077527F'Sym3 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528
type instance Apply (Let6989586621679077527F'Sym3 f6989586621679077524 z06989586621679077525 xs6989586621679077526) a6989586621679077528 = Let6989586621679077527F'Sym4 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528
data Let6989586621679077527F'Sym4 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 a6989586621679077529
  where
    Let6989586621679077527F'Sym4KindInference :: SameKind (Apply (Let6989586621679077527F'Sym4 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528) arg_ahCz) (Let6989586621679077527F'Sym5 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 arg_ahCz) =>
                                                 Let6989586621679077527F'Sym4 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 a6989586621679077529
type instance Apply (Let6989586621679077527F'Sym4 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528) a6989586621679077529 = Let6989586621679077527F'Sym5 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 a6989586621679077529
data Let6989586621679077527F'Sym5 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 a6989586621679077529 a6989586621679077530
  where
    Let6989586621679077527F'Sym5KindInference :: SameKind (Apply (Let6989586621679077527F'Sym5 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 a6989586621679077529) arg_ahCz) (Let6989586621679077527F'Sym6 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 a6989586621679077529 arg_ahCz) =>
                                                 Let6989586621679077527F'Sym5 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 a6989586621679077529 a6989586621679077530
type instance Apply (Let6989586621679077527F'Sym5 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 a6989586621679077529) a6989586621679077530 = Let6989586621679077527F' f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 a6989586621679077529 a6989586621679077530
type family Let6989586621679077527F'Sym6 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 a6989586621679077529 a6989586621679077530 where
  Let6989586621679077527F'Sym6 f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 a6989586621679077529 a6989586621679077530 = Let6989586621679077527F' f6989586621679077524 z06989586621679077525 xs6989586621679077526 a6989586621679077528 a6989586621679077529 a6989586621679077530
type family Let6989586621679077527F' f_ahCs z0_ahCt xs_ahCu a_ahCw a_ahCx a_ahCy where
  Let6989586621679077527F' f_ahCs z0_ahCt xs_ahCu k_ahCA x_ahCB z_ahCC = Apply (Apply ($!@#@$) k_ahCA) (Apply (Apply f_ahCs x_ahCB) z_ahCC)
type Foldr'_6989586621679077515 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD)
                                   -> b_ahBD -> t_ahBx a_ahBC -> b_ahBD
type family Foldr'_6989586621679077515 (a_ahCl :: (~>) a_ahBC ((~>) b_ahBD b_ahBD)) (a_ahCm :: b_ahBD) (a_ahCn :: t_ahBx a_ahBC) :: b_ahBD where
  Foldr'_6989586621679077515 f_ahCs z0_ahCt xs_ahCu = Apply (Apply (Apply (Apply FoldlSym0 (Let6989586621679077527F'Sym3 f_ahCs z0_ahCt xs_ahCu)) IdSym0) xs_ahCu) z0_ahCt
type Foldr'_6989586621679077515Sym0 :: (~>) ((~>) a_ahBC ((~>) b_ahBD b_ahBD)) ((~>) b_ahBD ((~>) (t_ahBx a_ahBC) b_ahBD))
data Foldr'_6989586621679077515Sym0 :: (~>) ((~>) a_ahBC ((~>) b_ahBD b_ahBD)) ((~>) b_ahBD ((~>) (t_ahBx a_ahBC) b_ahBD))
  where
    Foldr'_6989586621679077515Sym0KindInference :: SameKind (Apply Foldr'_6989586621679077515Sym0 arg_ahCo) (Foldr'_6989586621679077515Sym1 arg_ahCo) =>
                                                   Foldr'_6989586621679077515Sym0 a6989586621679077521
type instance Apply Foldr'_6989586621679077515Sym0 a6989586621679077521 = Foldr'_6989586621679077515Sym1 a6989586621679077521
type Foldr'_6989586621679077515Sym1 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD)
                                       -> (~>) b_ahBD ((~>) (t_ahBx a_ahBC) b_ahBD)
data Foldr'_6989586621679077515Sym1 (a6989586621679077521 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD)) :: (~>) b_ahBD ((~>) (t_ahBx a_ahBC) b_ahBD)
  where
    Foldr'_6989586621679077515Sym1KindInference :: SameKind (Apply (Foldr'_6989586621679077515Sym1 a6989586621679077521) arg_ahCo) (Foldr'_6989586621679077515Sym2 a6989586621679077521 arg_ahCo) =>
                                                   Foldr'_6989586621679077515Sym1 a6989586621679077521 a6989586621679077522
type instance Apply (Foldr'_6989586621679077515Sym1 a6989586621679077521) a6989586621679077522 = Foldr'_6989586621679077515Sym2 a6989586621679077521 a6989586621679077522
type Foldr'_6989586621679077515Sym2 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD)
                                       -> b_ahBD -> (~>) (t_ahBx a_ahBC) b_ahBD
data Foldr'_6989586621679077515Sym2 (a6989586621679077521 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD)) (a6989586621679077522 :: b_ahBD) :: (~>) (t_ahBx a_ahBC) b_ahBD
  where
    Foldr'_6989586621679077515Sym2KindInference :: SameKind (Apply (Foldr'_6989586621679077515Sym2 a6989586621679077521 a6989586621679077522) arg_ahCo) (Foldr'_6989586621679077515Sym3 a6989586621679077521 a6989586621679077522 arg_ahCo) =>
                                                   Foldr'_6989586621679077515Sym2 a6989586621679077521 a6989586621679077522 a6989586621679077523
type instance Apply (Foldr'_6989586621679077515Sym2 a6989586621679077521 a6989586621679077522) a6989586621679077523 = Foldr'_6989586621679077515 a6989586621679077521 a6989586621679077522 a6989586621679077523
type Foldr'_6989586621679077515Sym3 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD)
                                       -> b_ahBD -> t_ahBx a_ahBC -> b_ahBD
type family Foldr'_6989586621679077515Sym3 (a6989586621679077521 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD)) (a6989586621679077522 :: b_ahBD) (a6989586621679077523 :: t_ahBx a_ahBC) :: b_ahBD where
  Foldr'_6989586621679077515Sym3 a6989586621679077521 a6989586621679077522 a6989586621679077523 = Foldr'_6989586621679077515 a6989586621679077521 a6989586621679077522 a6989586621679077523
type Foldl_6989586621679077538 :: (~>) b_ahBE ((~>) a_ahBF b_ahBE)
                                  -> b_ahBE -> t_ahBx a_ahBF -> b_ahBE
type family Foldl_6989586621679077538 (a_ahCI :: (~>) b_ahBE ((~>) a_ahBF b_ahBE)) (a_ahCJ :: b_ahBE) (a_ahCK :: t_ahBx a_ahBF) :: b_ahBE where
  Foldl_6989586621679077538 f_ahCP z_ahCQ t_ahCR = Apply (Apply AppEndoSym0 (Apply GetDualSym0 (Apply (Apply FoldMapSym0 (Apply (Apply (.@#@$) DualSym0) (Apply (Apply (.@#@$) EndoSym0) (Apply FlipSym0 f_ahCP)))) t_ahCR))) z_ahCQ
type Foldl_6989586621679077538Sym0 :: (~>) ((~>) b_ahBE ((~>) a_ahBF b_ahBE)) ((~>) b_ahBE ((~>) (t_ahBx a_ahBF) b_ahBE))
data Foldl_6989586621679077538Sym0 :: (~>) ((~>) b_ahBE ((~>) a_ahBF b_ahBE)) ((~>) b_ahBE ((~>) (t_ahBx a_ahBF) b_ahBE))
  where
    Foldl_6989586621679077538Sym0KindInference :: SameKind (Apply Foldl_6989586621679077538Sym0 arg_ahCL) (Foldl_6989586621679077538Sym1 arg_ahCL) =>
                                                  Foldl_6989586621679077538Sym0 a6989586621679077544
type instance Apply Foldl_6989586621679077538Sym0 a6989586621679077544 = Foldl_6989586621679077538Sym1 a6989586621679077544
type Foldl_6989586621679077538Sym1 :: (~>) b_ahBE ((~>) a_ahBF b_ahBE)
                                      -> (~>) b_ahBE ((~>) (t_ahBx a_ahBF) b_ahBE)
data Foldl_6989586621679077538Sym1 (a6989586621679077544 :: (~>) b_ahBE ((~>) a_ahBF b_ahBE)) :: (~>) b_ahBE ((~>) (t_ahBx a_ahBF) b_ahBE)
  where
    Foldl_6989586621679077538Sym1KindInference :: SameKind (Apply (Foldl_6989586621679077538Sym1 a6989586621679077544) arg_ahCL) (Foldl_6989586621679077538Sym2 a6989586621679077544 arg_ahCL) =>
                                                  Foldl_6989586621679077538Sym1 a6989586621679077544 a6989586621679077545
type instance Apply (Foldl_6989586621679077538Sym1 a6989586621679077544) a6989586621679077545 = Foldl_6989586621679077538Sym2 a6989586621679077544 a6989586621679077545
type Foldl_6989586621679077538Sym2 :: (~>) b_ahBE ((~>) a_ahBF b_ahBE)
                                      -> b_ahBE -> (~>) (t_ahBx a_ahBF) b_ahBE
data Foldl_6989586621679077538Sym2 (a6989586621679077544 :: (~>) b_ahBE ((~>) a_ahBF b_ahBE)) (a6989586621679077545 :: b_ahBE) :: (~>) (t_ahBx a_ahBF) b_ahBE
  where
    Foldl_6989586621679077538Sym2KindInference :: SameKind (Apply (Foldl_6989586621679077538Sym2 a6989586621679077544 a6989586621679077545) arg_ahCL) (Foldl_6989586621679077538Sym3 a6989586621679077544 a6989586621679077545 arg_ahCL) =>
                                                  Foldl_6989586621679077538Sym2 a6989586621679077544 a6989586621679077545 a6989586621679077546
type instance Apply (Foldl_6989586621679077538Sym2 a6989586621679077544 a6989586621679077545) a6989586621679077546 = Foldl_6989586621679077538 a6989586621679077544 a6989586621679077545 a6989586621679077546
type Foldl_6989586621679077538Sym3 :: (~>) b_ahBE ((~>) a_ahBF b_ahBE)
                                      -> b_ahBE -> t_ahBx a_ahBF -> b_ahBE
type family Foldl_6989586621679077538Sym3 (a6989586621679077544 :: (~>) b_ahBE ((~>) a_ahBF b_ahBE)) (a6989586621679077545 :: b_ahBE) (a6989586621679077546 :: t_ahBx a_ahBF) :: b_ahBE where
  Foldl_6989586621679077538Sym3 a6989586621679077544 a6989586621679077545 a6989586621679077546 = Foldl_6989586621679077538 a6989586621679077544 a6989586621679077545 a6989586621679077546
class PFoldable t_ahBx where
  type family FoldMap (arg_ahBQ :: (~>) a_ahBz m_ahBy) (arg_ahBR :: t_ahBx a_ahBz) :: m_ahBy
  type family Foldr (arg_ahBV :: (~>) a_ahBA ((~>) b_ahBB b_ahBB)) (arg_ahBW :: b_ahBB) (arg_ahBX :: t_ahBx a_ahBA) :: b_ahBB
  type family Foldr' (arg_ahC2 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD)) (arg_ahC3 :: b_ahBD) (arg_ahC4 :: t_ahBx a_ahBC) :: b_ahBD
  type family Foldl (arg_ahC9 :: (~>) b_ahBE ((~>) a_ahBF b_ahBE)) (arg_ahCa :: b_ahBE) (arg_ahCb :: t_ahBx a_ahBF) :: b_ahBE
  type Foldr' a_ahCg a_ahCh a_ahCi = Apply (Apply (Apply Foldr'_6989586621679077515Sym0 a_ahCg) a_ahCh) a_ahCi
  type Foldl a_ahCD a_ahCE a_ahCF = Apply (Apply (Apply Foldl_6989586621679077538Sym0 a_ahCD) a_ahCE) a_ahCF
class SFoldable t_ahBx where
  sFoldMap ::
    forall a_ahBz
           m_ahBy
           (t_ahCS :: (~>) a_ahBz m_ahBy)
           (t_ahCT :: t_ahBx a_ahBz). SMonoid m_ahBy =>
                                      Sing t_ahCS
                                      -> Sing t_ahCT
                                         -> Sing (Apply (Apply FoldMapSym0 t_ahCS) t_ahCT :: m_ahBy)
  sFoldr ::
    forall a_ahBA
           b_ahBB
           (t_ahCX :: (~>) a_ahBA ((~>) b_ahBB b_ahBB))
           (t_ahCY :: b_ahBB)
           (t_ahCZ :: t_ahBx a_ahBA). Sing t_ahCX
                                      -> Sing t_ahCY
                                         -> Sing t_ahCZ
                                            -> Sing (Apply (Apply (Apply FoldrSym0 t_ahCX) t_ahCY) t_ahCZ :: b_ahBB)
  sFoldr' ::
    forall a_ahBC
           b_ahBD
           (t_ahD7 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD))
           (t_ahD8 :: b_ahBD)
           (t_ahD9 :: t_ahBx a_ahBC). Sing t_ahD7
                                      -> Sing t_ahD8
                                         -> Sing t_ahD9
                                            -> Sing (Apply (Apply (Apply Foldr'Sym0 t_ahD7) t_ahD8) t_ahD9 :: b_ahBD)
  sFoldl ::
    forall b_ahBE
           a_ahBF
           (t_ahDh :: (~>) b_ahBE ((~>) a_ahBF b_ahBE))
           (t_ahDi :: b_ahBE)
           (t_ahDj :: t_ahBx a_ahBF). Sing t_ahDh
                                      -> Sing t_ahDi
                                         -> Sing t_ahDj
                                            -> Sing (Apply (Apply (Apply FoldlSym0 t_ahDh) t_ahDi) t_ahDj :: b_ahBE)
  default sFoldr' ::
            forall a_ahBC
                   b_ahBD
                   (t_ahD7 :: (~>) a_ahBC ((~>) b_ahBD b_ahBD))
                   (t_ahD8 :: b_ahBD)
                   (t_ahD9 :: t_ahBx a_ahBC). ((Apply (Apply (Apply Foldr'Sym0 t_ahD7) t_ahD8) t_ahD9 :: b_ahBD)
                                               ~
                                               Apply (Apply (Apply Foldr'_6989586621679077515Sym0 t_ahD7) t_ahD8) t_ahD9) =>
                                              Sing t_ahD7
                                              -> Sing t_ahD8
                                                 -> Sing t_ahD9
                                                    -> Sing (Apply (Apply (Apply Foldr'Sym0 t_ahD7) t_ahD8) t_ahD9 :: b_ahBD)
  default sFoldl ::
            forall b_ahBE
                   a_ahBF
                   (t_ahDh :: (~>) b_ahBE ((~>) a_ahBF b_ahBE))
                   (t_ahDi :: b_ahBE)
                   (t_ahDj :: t_ahBx a_ahBF). ((Apply (Apply (Apply FoldlSym0 t_ahDh) t_ahDi) t_ahDj :: b_ahBE)
                                               ~
                                               Apply (Apply (Apply Foldl_6989586621679077538Sym0 t_ahDh) t_ahDi) t_ahDj) =>
                                              Sing t_ahDh
                                              -> Sing t_ahDi
                                                 -> Sing t_ahDj
                                                    -> Sing (Apply (Apply (Apply FoldlSym0 t_ahDh) t_ahDi) t_ahDj :: b_ahBE)
  sFoldr'
    (sF :: Sing f_ahCs)
    (sZ0 :: Sing z0_ahCt)
    (sXs :: Sing xs_ahCu)
    = let
        sF' ::
          forall arg_ahDr arg_ahDs arg_ahDt. Sing arg_ahDr
                                             -> Sing arg_ahDs
                                                -> Sing arg_ahDt
                                                   -> Sing (Apply (Apply (Apply (Let6989586621679077527F'Sym3 f_ahCs z0_ahCt xs_ahCu) arg_ahDr) arg_ahDs) arg_ahDt)
        sF' (sK :: Sing k_ahCA) (sX :: Sing x_ahCB) (sZ :: Sing z_ahCC)
          = (applySing ((applySing ((singFun2 @($!@#@$)) (%$!))) sK))
              ((applySing ((applySing sF) sX)) sZ)
      in
        (applySing
           ((applySing
               ((applySing
                   ((applySing ((singFun3 @FoldlSym0) sFoldl))
                      ((singFun3
                          @(Let6989586621679077527F'Sym3 f_ahCs z0_ahCt xs_ahCu))
                         sF')))
                  ((singFun1 @IdSym0) sId)))
              sXs))
          sZ0
  sFoldl (sF :: Sing f_ahCP) (sZ :: Sing z_ahCQ) (sT :: Sing t_ahCR)
    = (applySing
         ((applySing ((singFun2 @AppEndoSym0) sAppEndo))
            ((applySing ((singFun1 @GetDualSym0) sGetDual))
               ((applySing
                   ((applySing ((singFun2 @FoldMapSym0) sFoldMap))
                      ((applySing
                          ((applySing ((singFun3 @(.@#@$)) (%.)))
                             ((singFun1 @DualSym0) SDual)))
                         ((applySing
                             ((applySing ((singFun3 @(.@#@$)) (%.)))
                                ((singFun1 @EndoSym0) SEndo)))
                            ((applySing ((singFun3 @FlipSym0) sFlip)) sF)))))
                  sT))))
        sZ

{-
$(singletonsOnly [d|
  deriving instance Foldable (Tuple2 a)
  |])
-}

type family Lambda_6989586621679081147_aiyU _f_6989586621679081117_aiyQ a_6989586621679081123_aiyR a_6989586621679081125_aiyS n_6989586621679081121_aiyV where
  Lambda_6989586621679081147_aiyU _f_6989586621679081117_aiyQ a_6989586621679081123_aiyR a_6989586621679081125_aiyS n_6989586621679081121_aiyV = MemptySym0
data Lambda_6989586621679081147Sym0 _f_69895866216790811176989586621679081144
  where
    Lambda_6989586621679081147Sym0KindInference :: SameKind (Apply Lambda_6989586621679081147Sym0 arg_aiyW) (Lambda_6989586621679081147Sym1 arg_aiyW) =>
                                                   Lambda_6989586621679081147Sym0 _f_69895866216790811176989586621679081144
type instance Apply Lambda_6989586621679081147Sym0 _f_69895866216790811176989586621679081144 = Lambda_6989586621679081147Sym1 _f_69895866216790811176989586621679081144
data Lambda_6989586621679081147Sym1 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145
  where
    Lambda_6989586621679081147Sym1KindInference :: SameKind (Apply (Lambda_6989586621679081147Sym1 _f_69895866216790811176989586621679081144) arg_aiyW) (Lambda_6989586621679081147Sym2 _f_69895866216790811176989586621679081144 arg_aiyW) =>
                                                   Lambda_6989586621679081147Sym1 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145
type instance Apply (Lambda_6989586621679081147Sym1 _f_69895866216790811176989586621679081144) a_69895866216790811236989586621679081145 = Lambda_6989586621679081147Sym2 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145
data Lambda_6989586621679081147Sym2 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 a_69895866216790811256989586621679081146
  where
    Lambda_6989586621679081147Sym2KindInference :: SameKind (Apply (Lambda_6989586621679081147Sym2 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145) arg_aiyW) (Lambda_6989586621679081147Sym3 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 arg_aiyW) =>
                                                   Lambda_6989586621679081147Sym2 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 a_69895866216790811256989586621679081146
type instance Apply (Lambda_6989586621679081147Sym2 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145) a_69895866216790811256989586621679081146 = Lambda_6989586621679081147Sym3 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 a_69895866216790811256989586621679081146
data Lambda_6989586621679081147Sym3 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 a_69895866216790811256989586621679081146 n_69895866216790811216989586621679081149
  where
    Lambda_6989586621679081147Sym3KindInference :: SameKind (Apply (Lambda_6989586621679081147Sym3 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 a_69895866216790811256989586621679081146) arg_aiyW) (Lambda_6989586621679081147Sym4 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 a_69895866216790811256989586621679081146 arg_aiyW) =>
                                                   Lambda_6989586621679081147Sym3 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 a_69895866216790811256989586621679081146 n_69895866216790811216989586621679081149
type instance Apply (Lambda_6989586621679081147Sym3 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 a_69895866216790811256989586621679081146) n_69895866216790811216989586621679081149 = Lambda_6989586621679081147_aiyU _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 a_69895866216790811256989586621679081146 n_69895866216790811216989586621679081149
type family Lambda_6989586621679081147Sym4 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 a_69895866216790811256989586621679081146 n_69895866216790811216989586621679081149 where
  Lambda_6989586621679081147Sym4 _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 a_69895866216790811256989586621679081146 n_69895866216790811216989586621679081149 = Lambda_6989586621679081147_aiyU _f_69895866216790811176989586621679081144 a_69895866216790811236989586621679081145 a_69895866216790811256989586621679081146 n_69895866216790811216989586621679081149
type FoldMap_6989586621679081137 :: (~>) a_ahBz_acmX m_ahBy_acmY
                                    -> Tuple2 a_aikY a_ahBz_acmX -> m_ahBy_acmY
type family FoldMap_6989586621679081137 (a_aiyL :: (~>) a_ahBz_acmX m_ahBy_acmY) (a_aiyM :: Tuple2 a_aikY a_ahBz_acmX) :: m_ahBy_acmY where
  FoldMap_6989586621679081137 _f_6989586621679081117_aiyQ ('Tuple2 a_6989586621679081123_aiyR a_6989586621679081125_aiyS) = Apply (Apply MappendSym0 (Apply (Apply (Apply (Apply Lambda_6989586621679081147Sym0 _f_6989586621679081117_aiyQ) a_6989586621679081123_aiyR) a_6989586621679081125_aiyS) a_6989586621679081123_aiyR)) (Apply _f_6989586621679081117_aiyQ a_6989586621679081125_aiyS)
type FoldMap_6989586621679081137Sym0 :: (~>) ((~>) a_ahBz_acmX m_ahBy_acmY) ((~>) (Tuple2 a_aikY a_ahBz_acmX) m_ahBy_acmY)
data FoldMap_6989586621679081137Sym0 :: (~>) ((~>) a_ahBz_acmX m_ahBy_acmY) ((~>) (Tuple2 a_aikY a_ahBz_acmX) m_ahBy_acmY)
  where
    FoldMap_6989586621679081137Sym0KindInference :: SameKind (Apply FoldMap_6989586621679081137Sym0 arg_aiyN) (FoldMap_6989586621679081137Sym1 arg_aiyN) =>
                                                    FoldMap_6989586621679081137Sym0 a6989586621679081142
type instance Apply FoldMap_6989586621679081137Sym0 a6989586621679081142 = FoldMap_6989586621679081137Sym1 a6989586621679081142
type FoldMap_6989586621679081137Sym1 :: (~>) a_ahBz_acmX m_ahBy_acmY
                                        -> (~>) (Tuple2 a_aikY a_ahBz_acmX) m_ahBy_acmY
data FoldMap_6989586621679081137Sym1 (a6989586621679081142 :: (~>) a_ahBz_acmX m_ahBy_acmY) :: (~>) (Tuple2 a_aikY a_ahBz_acmX) m_ahBy_acmY
  where
    FoldMap_6989586621679081137Sym1KindInference :: SameKind (Apply (FoldMap_6989586621679081137Sym1 a6989586621679081142) arg_aiyN) (FoldMap_6989586621679081137Sym2 a6989586621679081142 arg_aiyN) =>
                                                    FoldMap_6989586621679081137Sym1 a6989586621679081142 a6989586621679081143
type instance Apply (FoldMap_6989586621679081137Sym1 a6989586621679081142) a6989586621679081143 = FoldMap_6989586621679081137 a6989586621679081142 a6989586621679081143
type FoldMap_6989586621679081137Sym2 :: (~>) a_ahBz_acmX m_ahBy_acmY
                                        -> Tuple2 a_aikY a_ahBz_acmX -> m_ahBy_acmY
type family FoldMap_6989586621679081137Sym2 (a6989586621679081142 :: (~>) a_ahBz_acmX m_ahBy_acmY) (a6989586621679081143 :: Tuple2 a_aikY a_ahBz_acmX) :: m_ahBy_acmY where
  FoldMap_6989586621679081137Sym2 a6989586621679081142 a6989586621679081143 = FoldMap_6989586621679081137 a6989586621679081142 a6989586621679081143
type family Lambda_6989586621679081167_aize _f_6989586621679081117_aiz9 _z_6989586621679081119_aiza a_6989586621679081131_aizb a_6989586621679081133_aizc n1_6989586621679081127_aizf n2_6989586621679081129_aizg where
  Lambda_6989586621679081167_aize _f_6989586621679081117_aiz9 _z_6989586621679081119_aiza a_6989586621679081131_aizb a_6989586621679081133_aizc n1_6989586621679081127_aizf n2_6989586621679081129_aizg = n2_6989586621679081129_aizg
data Lambda_6989586621679081167Sym0 _f_69895866216790811176989586621679081163
  where
    Lambda_6989586621679081167Sym0KindInference :: SameKind (Apply Lambda_6989586621679081167Sym0 arg_aizh) (Lambda_6989586621679081167Sym1 arg_aizh) =>
                                                   Lambda_6989586621679081167Sym0 _f_69895866216790811176989586621679081163
type instance Apply Lambda_6989586621679081167Sym0 _f_69895866216790811176989586621679081163 = Lambda_6989586621679081167Sym1 _f_69895866216790811176989586621679081163
data Lambda_6989586621679081167Sym1 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164
  where
    Lambda_6989586621679081167Sym1KindInference :: SameKind (Apply (Lambda_6989586621679081167Sym1 _f_69895866216790811176989586621679081163) arg_aizh) (Lambda_6989586621679081167Sym2 _f_69895866216790811176989586621679081163 arg_aizh) =>
                                                   Lambda_6989586621679081167Sym1 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164
type instance Apply (Lambda_6989586621679081167Sym1 _f_69895866216790811176989586621679081163) _z_69895866216790811196989586621679081164 = Lambda_6989586621679081167Sym2 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164
data Lambda_6989586621679081167Sym2 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165
  where
    Lambda_6989586621679081167Sym2KindInference :: SameKind (Apply (Lambda_6989586621679081167Sym2 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164) arg_aizh) (Lambda_6989586621679081167Sym3 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 arg_aizh) =>
                                                   Lambda_6989586621679081167Sym2 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165
type instance Apply (Lambda_6989586621679081167Sym2 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164) a_69895866216790811316989586621679081165 = Lambda_6989586621679081167Sym3 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165
data Lambda_6989586621679081167Sym3 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166
  where
    Lambda_6989586621679081167Sym3KindInference :: SameKind (Apply (Lambda_6989586621679081167Sym3 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165) arg_aizh) (Lambda_6989586621679081167Sym4 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 arg_aizh) =>
                                                   Lambda_6989586621679081167Sym3 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166
type instance Apply (Lambda_6989586621679081167Sym3 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165) a_69895866216790811336989586621679081166 = Lambda_6989586621679081167Sym4 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166
data Lambda_6989586621679081167Sym4 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 n1_69895866216790811276989586621679081169
  where
    Lambda_6989586621679081167Sym4KindInference :: SameKind (Apply (Lambda_6989586621679081167Sym4 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166) arg_aizh) (Lambda_6989586621679081167Sym5 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 arg_aizh) =>
                                                   Lambda_6989586621679081167Sym4 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 n1_69895866216790811276989586621679081169
type instance Apply (Lambda_6989586621679081167Sym4 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166) n1_69895866216790811276989586621679081169 = Lambda_6989586621679081167Sym5 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 n1_69895866216790811276989586621679081169
data Lambda_6989586621679081167Sym5 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 n1_69895866216790811276989586621679081169 n2_69895866216790811296989586621679081170
  where
    Lambda_6989586621679081167Sym5KindInference :: SameKind (Apply (Lambda_6989586621679081167Sym5 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 n1_69895866216790811276989586621679081169) arg_aizh) (Lambda_6989586621679081167Sym6 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 n1_69895866216790811276989586621679081169 arg_aizh) =>
                                                   Lambda_6989586621679081167Sym5 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 n1_69895866216790811276989586621679081169 n2_69895866216790811296989586621679081170
type instance Apply (Lambda_6989586621679081167Sym5 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 n1_69895866216790811276989586621679081169) n2_69895866216790811296989586621679081170 = Lambda_6989586621679081167_aize _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 n1_69895866216790811276989586621679081169 n2_69895866216790811296989586621679081170
type family Lambda_6989586621679081167Sym6 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 n1_69895866216790811276989586621679081169 n2_69895866216790811296989586621679081170 where
  Lambda_6989586621679081167Sym6 _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 n1_69895866216790811276989586621679081169 n2_69895866216790811296989586621679081170 = Lambda_6989586621679081167_aize _f_69895866216790811176989586621679081163 _z_69895866216790811196989586621679081164 a_69895866216790811316989586621679081165 a_69895866216790811336989586621679081166 n1_69895866216790811276989586621679081169 n2_69895866216790811296989586621679081170
type Foldr_6989586621679081154 :: (~>) a_ahBA_acn1 ((~>) b_ahBB_acn2 b_ahBB_acn2)
                                  -> b_ahBB_acn2 -> Tuple2 a_aikY a_ahBA_acn1 -> b_ahBB_acn2
type family Foldr_6989586621679081154 (a_aiz2 :: (~>) a_ahBA_acn1 ((~>) b_ahBB_acn2 b_ahBB_acn2)) (a_aiz3 :: b_ahBB_acn2) (a_aiz4 :: Tuple2 a_aikY a_ahBA_acn1) :: b_ahBB_acn2 where
  Foldr_6989586621679081154 _f_6989586621679081117_aiz9 _z_6989586621679081119_aiza ('Tuple2 a_6989586621679081131_aizb a_6989586621679081133_aizc) = Apply (Apply (Apply (Apply (Apply (Apply Lambda_6989586621679081167Sym0 _f_6989586621679081117_aiz9) _z_6989586621679081119_aiza) a_6989586621679081131_aizb) a_6989586621679081133_aizc) a_6989586621679081131_aizb) (Apply (Apply _f_6989586621679081117_aiz9 a_6989586621679081133_aizc) _z_6989586621679081119_aiza)
type Foldr_6989586621679081154Sym0 :: (~>) ((~>) a_ahBA_acn1 ((~>) b_ahBB_acn2 b_ahBB_acn2)) ((~>) b_ahBB_acn2 ((~>) (Tuple2 a_aikY a_ahBA_acn1) b_ahBB_acn2))
data Foldr_6989586621679081154Sym0 :: (~>) ((~>) a_ahBA_acn1 ((~>) b_ahBB_acn2 b_ahBB_acn2)) ((~>) b_ahBB_acn2 ((~>) (Tuple2 a_aikY a_ahBA_acn1) b_ahBB_acn2))
  where
    Foldr_6989586621679081154Sym0KindInference :: SameKind (Apply Foldr_6989586621679081154Sym0 arg_aiz5) (Foldr_6989586621679081154Sym1 arg_aiz5) =>
                                                  Foldr_6989586621679081154Sym0 a6989586621679081160
type instance Apply Foldr_6989586621679081154Sym0 a6989586621679081160 = Foldr_6989586621679081154Sym1 a6989586621679081160
type Foldr_6989586621679081154Sym1 :: (~>) a_ahBA_acn1 ((~>) b_ahBB_acn2 b_ahBB_acn2)
                                      -> (~>) b_ahBB_acn2 ((~>) (Tuple2 a_aikY a_ahBA_acn1) b_ahBB_acn2)
data Foldr_6989586621679081154Sym1 (a6989586621679081160 :: (~>) a_ahBA_acn1 ((~>) b_ahBB_acn2 b_ahBB_acn2)) :: (~>) b_ahBB_acn2 ((~>) (Tuple2 a_aikY a_ahBA_acn1) b_ahBB_acn2)
  where
    Foldr_6989586621679081154Sym1KindInference :: SameKind (Apply (Foldr_6989586621679081154Sym1 a6989586621679081160) arg_aiz5) (Foldr_6989586621679081154Sym2 a6989586621679081160 arg_aiz5) =>
                                                  Foldr_6989586621679081154Sym1 a6989586621679081160 a6989586621679081161
type instance Apply (Foldr_6989586621679081154Sym1 a6989586621679081160) a6989586621679081161 = Foldr_6989586621679081154Sym2 a6989586621679081160 a6989586621679081161
type Foldr_6989586621679081154Sym2 :: (~>) a_ahBA_acn1 ((~>) b_ahBB_acn2 b_ahBB_acn2)
                                      -> b_ahBB_acn2
                                         -> (~>) (Tuple2 a_aikY a_ahBA_acn1) b_ahBB_acn2
data Foldr_6989586621679081154Sym2 (a6989586621679081160 :: (~>) a_ahBA_acn1 ((~>) b_ahBB_acn2 b_ahBB_acn2)) (a6989586621679081161 :: b_ahBB_acn2) :: (~>) (Tuple2 a_aikY a_ahBA_acn1) b_ahBB_acn2
  where
    Foldr_6989586621679081154Sym2KindInference :: SameKind (Apply (Foldr_6989586621679081154Sym2 a6989586621679081160 a6989586621679081161) arg_aiz5) (Foldr_6989586621679081154Sym3 a6989586621679081160 a6989586621679081161 arg_aiz5) =>
                                                  Foldr_6989586621679081154Sym2 a6989586621679081160 a6989586621679081161 a6989586621679081162
type instance Apply (Foldr_6989586621679081154Sym2 a6989586621679081160 a6989586621679081161) a6989586621679081162 = Foldr_6989586621679081154 a6989586621679081160 a6989586621679081161 a6989586621679081162
type Foldr_6989586621679081154Sym3 :: (~>) a_ahBA_acn1 ((~>) b_ahBB_acn2 b_ahBB_acn2)
                                      -> b_ahBB_acn2 -> Tuple2 a_aikY a_ahBA_acn1 -> b_ahBB_acn2
type family Foldr_6989586621679081154Sym3 (a6989586621679081160 :: (~>) a_ahBA_acn1 ((~>) b_ahBB_acn2 b_ahBB_acn2)) (a6989586621679081161 :: b_ahBB_acn2) (a6989586621679081162 :: Tuple2 a_aikY a_ahBA_acn1) :: b_ahBB_acn2 where
  Foldr_6989586621679081154Sym3 a6989586621679081160 a6989586621679081161 a6989586621679081162 = Foldr_6989586621679081154 a6989586621679081160 a6989586621679081161 a6989586621679081162
instance PFoldable (Tuple2 a_aikY) where
  type FoldMap a_aiyH a_aiyI = Apply (Apply FoldMap_6989586621679081137Sym0 a_aiyH) a_aiyI
  type Foldr a_aiyX a_aiyY a_aiyZ = Apply (Apply (Apply Foldr_6989586621679081154Sym0 a_aiyX) a_aiyY) a_aiyZ
instance SFoldable (Tuple2 a_aikY) where
  sFoldMap ::
    forall (a_ahBz_acm7 :: Type)
           (m_ahBy_acm8 :: Type)
           (t_ahCS_acm9 :: (~>) a_ahBz_acm7 m_ahBy_acm8)
           (t_ahCT_acma :: Tuple2 a_aikY a_ahBz_acm7). SMonoid m_ahBy_acm8 =>
                                                       Sing t_ahCS_acm9
                                                       -> Sing t_ahCT_acma
                                                          -> Sing (Apply (Apply (FoldMapSym0 :: TyFun ((~>) a_ahBz_acm7 m_ahBy_acm8) ((~>) (Tuple2 a_aikY a_ahBz_acm7) m_ahBy_acm8)
                                                                                                -> Type) t_ahCS_acm9) t_ahCT_acma)
  sFoldr ::
    forall (a_ahBA_acmb :: Type)
           (b_ahBB_acmc :: Type)
           (t_ahCX_acmd :: (~>) a_ahBA_acmb ((~>) b_ahBB_acmc b_ahBB_acmc))
           (t_ahCY_acme :: b_ahBB_acmc)
           (t_ahCZ_acmf :: Tuple2 a_aikY a_ahBA_acmb). Sing t_ahCX_acmd
                                                       -> Sing t_ahCY_acme
                                                          -> Sing t_ahCZ_acmf
                                                             -> Sing (Apply (Apply (Apply (FoldrSym0 :: TyFun ((~>) a_ahBA_acmb ((~>) b_ahBB_acmc b_ahBB_acmc)) ((~>) b_ahBB_acmc ((~>) (Tuple2 a_aikY a_ahBA_acmb) b_ahBB_acmc))
                                                                                                        -> Type) t_ahCX_acmd) t_ahCY_acme) t_ahCZ_acmf)
  sFoldMap
    (_sf_6989586621679081117 :: Sing _f_6989586621679081117_aiyQ)
    (STuple2 (sA_6989586621679081123 :: Sing a_6989586621679081123_aiyR)
             (sA_6989586621679081125 :: Sing a_6989586621679081125_aiyS))
    = (applySing
         ((applySing ((singFun2 @MappendSym0) sMappend))
            ((applySing
                ((singFun1
                    @(Apply (Apply (Apply Lambda_6989586621679081147Sym0 _f_6989586621679081117_aiyQ) a_6989586621679081123_aiyR) a_6989586621679081125_aiyS))
                   (\ sN_6989586621679081121
                      -> case sN_6989586621679081121 of
                           (_ :: Sing n_6989586621679081121_aiyV) -> sMempty)))
               sA_6989586621679081123)))
        ((applySing _sf_6989586621679081117) sA_6989586621679081125)
  sFoldr
    (_sf_6989586621679081117 :: Sing _f_6989586621679081117_aiz9)
    (_sz_6989586621679081119 :: Sing _z_6989586621679081119_aiza)
    (STuple2 (sA_6989586621679081131 :: Sing a_6989586621679081131_aizb)
             (sA_6989586621679081133 :: Sing a_6989586621679081133_aizc))
    = (applySing
         ((applySing
             ((singFun2
                 @(Apply (Apply (Apply (Apply Lambda_6989586621679081167Sym0 _f_6989586621679081117_aiz9) _z_6989586621679081119_aiza) a_6989586621679081131_aizb) a_6989586621679081133_aizc))
                (\ sN1_6989586621679081127 sN2_6989586621679081129
                   -> case ((,) sN1_6989586621679081127) sN2_6989586621679081129 of
                        (,) (_ :: Sing n1_6989586621679081127_aizf)
                            (_ :: Sing n2_6989586621679081129_aizg)
                          -> sN2_6989586621679081129)))
            sA_6989586621679081131))
        ((applySing
            ((applySing _sf_6989586621679081117) sA_6989586621679081133))
           _sz_6989586621679081119)