Ticket #12506: test1000.hs

File test1000.hs, 11.9 KB (added by tdammers, 22 months ago)

The actual test input used when comparing 7.10.3 against HEAD (8.4.x)

Line 
1{-# LANGUAGE TypeSynonymInstances, TypeFamilies, FlexibleContexts, EmptyDataDecls #-}
2{-# LANGUAGE KindSignatures, TypeFamilies, UndecidableInstances, MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, ScopedTypeVariables #-}
3{-# LANGUAGE TypeSynonymInstances, FlexibleInstances, MultiParamTypeClasses, TypeFamilies #-}
4module Main where
5
6import System.IO.Unsafe
7
8data Same
9data Different
10
11data Match a
12data NoFunction a b
13
14type family Contains as a where
15  Contains () (x ()) = Different
16  Contains (a as) (a ()) = Same
17  Contains (a as) (b ()) = Contains as (b ())
18
19type family FindOpHelper orig hierarchy  (needle :: *) (found :: *) :: * where
20  FindOpHelper orig hierarchy needle Same = Match hierarchy
21  FindOpHelper orig (child ancestors) needle Different = FindOp orig ancestors needle
22
23
24type family FindOp orig hierarchy (needle :: *) :: * where
25  FindOp orig () n = NoFunction n orig
26  FindOp orig hierarchy needle = FindOpHelper orig hierarchy needle (Contains (Functions hierarchy) needle)
27
28data InHierarchy
29data NotInHierarchy a b
30
31type family FindInHierarchy (needle :: * ) (curr :: *) (haystack :: *) :: * where
32  FindInHierarchy needle () (a as) = NotInHierarchy needle (a as)
33  FindInHierarchy needle (a as) (a as) = InHierarchy
34  FindInHierarchy needle (a as) (b bs) = FindInHierarchy needle as (b bs)
35
36class Parent a b
37instance (InHierarchy ~ FindInHierarchy a a b) => Parent a b
38
39type family Functions (x :: *) :: *
40
41class Op op obj origObj impl where
42  runOp :: op -> origObj -> (Ref obj) -> impl
43
44data Ref a = Ref ()
45
46castTo :: Ref a -> Ref r
47castTo (Ref x) = (Ref x)
48
49dispatch :: forall op obj origObj impl.
50            (
51              Match obj ~ FindOp origObj origObj op,
52              Op op obj origObj impl
53            ) =>
54            op -> Ref origObj -> impl
55dispatch op refOrig = runOp op (undefined :: origObj) ((castTo refOrig) :: Ref obj)
56
57a30 :: (Match r ~ FindOp a a (A30 ()), Op (A30 ()) r a impl) => Ref a -> impl
58a30 aRef = dispatch (undefined :: A30 ()) aRef
59
60data CBase parent
61type Base = CBase ()
62
63data CA parent
64type A = CA Base
65type AMembers =
66 (A0
67 (A1
68 (A2
69 (A3
70 (A4
71 (A5
72 (A6
73 (A7
74 (A8
75 (A9
76 (A10
77 (A11
78 (A12
79 (A13
80 (A14
81 (A15
82 (A16
83 (A17
84 (A18
85 (A19
86 (A20
87 (A21
88 (A22
89 (A23
90 (A24
91 (A25
92 (A26
93 (A27
94 (A28
95 (A29
96 (A30
97 ())))))))))))))))))))))))))))))))
98type instance Functions A = AMembers
99
100data CB parent
101type B = CB A
102type BMembers =
103 (B0
104 (B1
105 (B2
106 (B3
107 (B4
108 (B5
109 (B6
110 (B7
111 (B8
112 (B9
113 (B10
114 (B11
115 (B12
116 (B13
117 (B14
118 (B15
119 (B16
120 (B17
121 (B18
122 (B19
123 (B20
124 (B21
125 (B22
126 (B23
127 (B24
128 (B25
129 (B26
130 (B27
131 (B28
132 (B29
133 (B30
134 ())))))))))))))))))))))))))))))))
135
136type instance Functions B = BMembers
137
138
139data CC parent
140type C = CC A
141type CMembers =
142 (C0
143 (C1
144 (C2
145 (C3
146 (C4
147 (C5
148 (C6
149 (C7
150 (C8
151 (C9
152 (C10
153 (C11
154 (C12
155 (C13
156 (C14
157 (C15
158 (C16
159 (C17
160 (C18
161 (C19
162 (C20
163 (C21
164 (C22
165 (C23
166 (C24
167 (C25
168 (C26
169 (C27
170 (C28
171 (C29
172 (C30
173 ())))))))))))))))))))))))))))))))
174
175type instance Functions C = CMembers
176
177data CD parent
178type D = CD C
179type instance Functions D = ()
180
181data A0 a
182data A1 a
183data A2 a
184data A3 a
185data A4 a
186data A5 a
187data A6 a
188data A7 a
189data A8 a
190data A9 a
191data A10 a
192data A11 a
193data A12 a
194data A13 a
195data A14 a
196data A15 a
197data A16 a
198data A17 a
199data A18 a
200data A19 a
201data A20 a
202data A21 a
203data A22 a
204data A23 a
205data A24 a
206data A25 a
207data A26 a
208data A27 a
209data A28 a
210data A29 a
211data A30 a
212data B0 a
213data B1 a
214data B2 a
215data B3 a
216data B4 a
217data B5 a
218data B6 a
219data B7 a
220data B8 a
221data B9 a
222data B10 a
223data B11 a
224data B12 a
225data B13 a
226data B14 a
227data B15 a
228data B16 a
229data B17 a
230data B18 a
231data B19 a
232data B20 a
233data B21 a
234data B22 a
235data B23 a
236data B24 a
237data B25 a
238data B26 a
239data B27 a
240data B28 a
241data B29 a
242data B30 a
243data C0 a
244data C1 a
245data C2 a
246data C3 a
247data C4 a
248data C5 a
249data C6 a
250data C7 a
251data C8 a
252data C9 a
253data C10 a
254data C11 a
255data C12 a
256data C13 a
257data C14 a
258data C15 a
259data C16 a
260data C17 a
261data C18 a
262data C19 a
263data C20 a
264data C21 a
265data C22 a
266data C23 a
267data C24 a
268data C25 a
269data C26 a
270data C27 a
271data C28 a
272data C29 a
273data C30 a
274
275instance (impl ~ IO ()) => Op (A30 ()) A orig impl where
276  runOp _ _ _ = putStrLn "A30"
277
278newD :: IO (Ref D)
279newD = undefined
280
281main :: IO ()
282main = do
283  d <- newD
284  a30 d
285  a30 d
286  a30 d
287  a30 d
288  a30 d
289  a30 d
290  a30 d
291  a30 d
292  a30 d
293  a30 d
294  a30 d
295  a30 d
296  a30 d
297  a30 d
298  a30 d
299  a30 d
300  a30 d
301  a30 d
302  a30 d
303  a30 d
304  a30 d
305  a30 d
306  a30 d
307  a30 d
308  a30 d
309  a30 d
310  a30 d
311  a30 d
312  a30 d
313  a30 d
314  a30 d
315  a30 d
316  a30 d
317  a30 d
318  a30 d
319  a30 d
320  a30 d
321  a30 d
322  a30 d
323  a30 d
324  a30 d
325  a30 d
326  a30 d
327  a30 d
328  a30 d
329  a30 d
330  a30 d
331  a30 d
332  a30 d
333  a30 d
334  a30 d
335  a30 d
336  a30 d
337  a30 d
338  a30 d
339  a30 d
340  a30 d
341  a30 d
342  a30 d
343  a30 d
344  a30 d
345  a30 d
346  a30 d
347  a30 d
348  a30 d
349  a30 d
350  a30 d
351  a30 d
352  a30 d
353  a30 d
354  a30 d
355  a30 d
356  a30 d
357  a30 d
358  a30 d
359  a30 d
360  a30 d
361  a30 d
362  a30 d
363  a30 d
364  a30 d
365  a30 d
366  a30 d
367  a30 d
368  a30 d
369  a30 d
370  a30 d
371  a30 d
372  a30 d
373  a30 d
374  a30 d
375  a30 d
376  a30 d
377  a30 d
378  a30 d
379  a30 d
380  a30 d
381  a30 d
382  a30 d
383  a30 d
384  a30 d
385  a30 d
386  a30 d
387  a30 d
388  a30 d
389  a30 d
390  a30 d
391  a30 d
392  a30 d
393  a30 d
394  a30 d
395  a30 d
396  a30 d
397  a30 d
398  a30 d
399  a30 d
400  a30 d
401  a30 d
402  a30 d
403  a30 d
404  a30 d
405  a30 d
406  a30 d
407  a30 d
408  a30 d
409  a30 d
410  a30 d
411  a30 d
412  a30 d
413  a30 d
414  a30 d
415  a30 d
416  a30 d
417  a30 d
418  a30 d
419  a30 d
420  a30 d
421  a30 d
422  a30 d
423  a30 d
424  a30 d
425  a30 d
426  a30 d
427  a30 d
428  a30 d
429  a30 d
430  a30 d
431  a30 d
432  a30 d
433  a30 d
434  a30 d
435  a30 d
436  a30 d
437  a30 d
438  a30 d
439  a30 d
440  a30 d
441  a30 d
442  a30 d
443  a30 d
444  a30 d
445  a30 d
446  a30 d
447  a30 d
448  a30 d
449  a30 d
450  a30 d
451  a30 d
452  a30 d
453  a30 d
454  a30 d
455  a30 d
456  a30 d
457  a30 d
458  a30 d
459  a30 d
460  a30 d
461  a30 d
462  a30 d
463  a30 d
464  a30 d
465  a30 d
466  a30 d
467  a30 d
468  a30 d
469  a30 d
470  a30 d
471  a30 d
472  a30 d
473  a30 d
474  a30 d
475  a30 d
476  a30 d
477  a30 d
478  a30 d
479  a30 d
480  a30 d
481  a30 d
482  a30 d
483  a30 d
484  a30 d
485  a30 d
486  a30 d
487  a30 d
488  a30 d
489  a30 d
490  a30 d
491  a30 d
492  a30 d
493  a30 d
494  a30 d
495  a30 d
496  a30 d
497  a30 d
498  a30 d
499  a30 d
500  a30 d
501  a30 d
502  a30 d
503  a30 d
504  a30 d
505  a30 d
506  a30 d
507  a30 d
508  a30 d
509  a30 d
510  a30 d
511  a30 d
512  a30 d
513  a30 d
514  a30 d
515  a30 d
516  a30 d
517  a30 d
518  a30 d
519  a30 d
520  a30 d
521  a30 d
522  a30 d
523  a30 d
524  a30 d
525  a30 d
526  a30 d
527  a30 d
528  a30 d
529  a30 d
530  a30 d
531  a30 d
532  a30 d
533  a30 d
534  a30 d
535  a30 d
536  a30 d
537  a30 d
538  a30 d
539  a30 d
540  a30 d
541  a30 d
542  a30 d
543  a30 d
544  a30 d
545  a30 d
546  a30 d
547  a30 d
548  a30 d
549  a30 d
550  a30 d
551  a30 d
552  a30 d
553  a30 d
554  a30 d
555  a30 d
556  a30 d
557  a30 d
558  a30 d
559  a30 d
560  a30 d
561  a30 d
562  a30 d
563  a30 d
564  a30 d
565  a30 d
566  a30 d
567  a30 d
568  a30 d
569  a30 d
570  a30 d
571  a30 d
572  a30 d
573  a30 d
574  a30 d
575  a30 d
576  a30 d
577  a30 d
578  a30 d
579  a30 d
580  a30 d
581  a30 d
582  a30 d
583  a30 d
584  a30 d
585  a30 d
586  a30 d
587  a30 d
588  a30 d
589  a30 d
590  a30 d
591  a30 d
592  a30 d
593  a30 d
594  a30 d
595  a30 d
596  a30 d
597  a30 d
598  a30 d
599  a30 d
600  a30 d
601  a30 d
602  a30 d
603  a30 d
604  a30 d
605  a30 d
606  a30 d
607  a30 d
608  a30 d
609  a30 d
610  a30 d
611  a30 d
612  a30 d
613  a30 d
614  a30 d
615  a30 d
616  a30 d
617  a30 d
618  a30 d
619  a30 d
620  a30 d
621  a30 d
622  a30 d
623  a30 d
624  a30 d
625  a30 d
626  a30 d
627  a30 d
628  a30 d
629  a30 d
630  a30 d
631  a30 d
632  a30 d
633  a30 d
634  a30 d
635  a30 d
636  a30 d
637  a30 d
638  a30 d
639  a30 d
640  a30 d
641  a30 d
642  a30 d
643  a30 d
644  a30 d
645  a30 d
646  a30 d
647  a30 d
648  a30 d
649  a30 d
650  a30 d
651  a30 d
652  a30 d
653  a30 d
654  a30 d
655  a30 d
656  a30 d
657  a30 d
658  a30 d
659  a30 d
660  a30 d
661  a30 d
662  a30 d
663  a30 d
664  a30 d
665  a30 d
666  a30 d
667  a30 d
668  a30 d
669  a30 d
670  a30 d
671  a30 d
672  a30 d
673  a30 d
674  a30 d
675  a30 d
676  a30 d
677  a30 d
678  a30 d
679  a30 d
680  a30 d
681  a30 d
682  a30 d
683  a30 d
684  a30 d
685  a30 d
686  a30 d
687  a30 d
688  a30 d
689  a30 d
690  a30 d
691  a30 d
692  a30 d
693  a30 d
694  a30 d
695  a30 d
696  a30 d
697  a30 d
698  a30 d
699  a30 d
700  a30 d
701  a30 d
702  a30 d
703  a30 d
704  a30 d
705  a30 d
706  a30 d
707  a30 d
708  a30 d
709  a30 d
710  a30 d
711  a30 d
712  a30 d
713  a30 d
714  a30 d
715  a30 d
716  a30 d
717  a30 d
718  a30 d
719  a30 d
720  a30 d
721  a30 d
722  a30 d
723  a30 d
724  a30 d
725  a30 d
726  a30 d
727  a30 d
728  a30 d
729  a30 d
730  a30 d
731  a30 d
732  a30 d
733  a30 d
734  a30 d
735  a30 d
736  a30 d
737  a30 d
738  a30 d
739  a30 d
740  a30 d
741  a30 d
742  a30 d
743  a30 d
744  a30 d
745  a30 d
746  a30 d
747  a30 d
748  a30 d
749  a30 d
750  a30 d
751  a30 d
752  a30 d
753  a30 d
754  a30 d
755  a30 d
756  a30 d
757  a30 d
758  a30 d
759  a30 d
760  a30 d
761  a30 d
762  a30 d
763  a30 d
764  a30 d
765  a30 d
766  a30 d
767  a30 d
768  a30 d
769  a30 d
770  a30 d
771  a30 d
772  a30 d
773  a30 d
774  a30 d
775  a30 d
776  a30 d
777  a30 d
778  a30 d
779  a30 d
780  a30 d
781  a30 d
782  a30 d
783  a30 d
784  a30 d
785  a30 d
786  a30 d
787  a30 d
788  a30 d
789  a30 d
790  a30 d
791  a30 d
792  a30 d
793  a30 d
794  a30 d
795  a30 d
796  a30 d
797  a30 d
798  a30 d
799  a30 d
800  a30 d
801  a30 d
802  a30 d
803  a30 d
804  a30 d
805  a30 d
806  a30 d
807  a30 d
808  a30 d
809  a30 d
810  a30 d
811  a30 d
812  a30 d
813  a30 d
814  a30 d
815  a30 d
816  a30 d
817  a30 d
818  a30 d
819  a30 d
820  a30 d
821  a30 d
822  a30 d
823  a30 d
824  a30 d
825  a30 d
826  a30 d
827  a30 d
828  a30 d
829  a30 d
830  a30 d
831  a30 d
832  a30 d
833  a30 d
834  a30 d
835  a30 d
836  a30 d
837  a30 d
838  a30 d
839  a30 d
840  a30 d
841  a30 d
842  a30 d
843  a30 d
844  a30 d
845  a30 d
846  a30 d
847  a30 d
848  a30 d
849  a30 d
850  a30 d
851  a30 d
852  a30 d
853  a30 d
854  a30 d
855  a30 d
856  a30 d
857  a30 d
858  a30 d
859  a30 d
860  a30 d
861  a30 d
862  a30 d
863  a30 d
864  a30 d
865  a30 d
866  a30 d
867  a30 d
868  a30 d
869  a30 d
870  a30 d
871  a30 d
872  a30 d
873  a30 d
874  a30 d
875  a30 d
876  a30 d
877  a30 d
878  a30 d
879  a30 d
880  a30 d
881  a30 d
882  a30 d
883  a30 d
884  a30 d
885  a30 d
886  a30 d
887  a30 d
888  a30 d
889  a30 d
890  a30 d
891  a30 d
892  a30 d
893  a30 d
894  a30 d
895  a30 d
896  a30 d
897  a30 d
898  a30 d
899  a30 d
900  a30 d
901  a30 d
902  a30 d
903  a30 d
904  a30 d
905  a30 d
906  a30 d
907  a30 d
908  a30 d
909  a30 d
910  a30 d
911  a30 d
912  a30 d
913  a30 d
914  a30 d
915  a30 d
916  a30 d
917  a30 d
918  a30 d
919  a30 d
920  a30 d
921  a30 d
922  a30 d
923  a30 d
924  a30 d
925  a30 d
926  a30 d
927  a30 d
928  a30 d
929  a30 d
930  a30 d
931  a30 d
932  a30 d
933  a30 d
934  a30 d
935  a30 d
936  a30 d
937  a30 d
938  a30 d
939  a30 d
940  a30 d
941  a30 d
942  a30 d
943  a30 d
944  a30 d
945  a30 d
946  a30 d
947  a30 d
948  a30 d
949  a30 d
950  a30 d
951  a30 d
952  a30 d
953  a30 d
954  a30 d
955  a30 d
956  a30 d
957  a30 d
958  a30 d
959  a30 d
960  a30 d
961  a30 d
962  a30 d
963  a30 d
964  a30 d
965  a30 d
966  a30 d
967  a30 d
968  a30 d
969  a30 d
970  a30 d
971  a30 d
972  a30 d
973  a30 d
974  a30 d
975  a30 d
976  a30 d
977  a30 d
978  a30 d
979  a30 d
980  a30 d
981  a30 d
982  a30 d
983  a30 d
984  a30 d
985  a30 d
986  a30 d
987  a30 d
988  a30 d
989  a30 d
990  a30 d
991  a30 d
992  a30 d
993  a30 d
994  a30 d
995  a30 d
996  a30 d
997  a30 d
998  a30 d
999  a30 d
1000  a30 d
1001  a30 d
1002  a30 d
1003  a30 d
1004  a30 d
1005  a30 d
1006  a30 d
1007  a30 d
1008  a30 d
1009  a30 d
1010  a30 d
1011  a30 d
1012  a30 d
1013  a30 d
1014  a30 d
1015  a30 d
1016  a30 d
1017  a30 d
1018  a30 d
1019  a30 d
1020  a30 d
1021  a30 d
1022  a30 d
1023  a30 d
1024  a30 d
1025  a30 d
1026  a30 d
1027  a30 d
1028  a30 d
1029  a30 d
1030  a30 d
1031  a30 d
1032  a30 d
1033  a30 d
1034  a30 d
1035  a30 d
1036  a30 d
1037  a30 d
1038  a30 d
1039  a30 d
1040  a30 d
1041  a30 d
1042  a30 d
1043  a30 d
1044  a30 d
1045  a30 d
1046  a30 d
1047  a30 d
1048  a30 d
1049  a30 d
1050  a30 d
1051  a30 d
1052  a30 d
1053  a30 d
1054  a30 d
1055  a30 d
1056  a30 d
1057  a30 d
1058  a30 d
1059  a30 d
1060  a30 d
1061  a30 d
1062  a30 d
1063  a30 d
1064  a30 d
1065  a30 d
1066  a30 d
1067  a30 d
1068  a30 d
1069  a30 d
1070  a30 d
1071  a30 d
1072  a30 d
1073  a30 d
1074  a30 d
1075  a30 d
1076  a30 d
1077  a30 d
1078  a30 d
1079  a30 d
1080  a30 d
1081  a30 d
1082  a30 d
1083  a30 d
1084  a30 d
1085  a30 d
1086  a30 d
1087  a30 d
1088  a30 d
1089  a30 d
1090  a30 d
1091  a30 d
1092  a30 d
1093  a30 d
1094  a30 d
1095  a30 d
1096  a30 d
1097  a30 d
1098  a30 d
1099  a30 d
1100  a30 d
1101  a30 d
1102  a30 d
1103  a30 d
1104  a30 d
1105  a30 d
1106  a30 d
1107  a30 d
1108  a30 d
1109  a30 d
1110  a30 d
1111  a30 d
1112  a30 d
1113  a30 d
1114  a30 d
1115  a30 d
1116  a30 d
1117  a30 d
1118  a30 d
1119  a30 d
1120  a30 d
1121  a30 d
1122  a30 d
1123  a30 d
1124  a30 d
1125  a30 d
1126  a30 d
1127  a30 d
1128  a30 d
1129  a30 d
1130  a30 d
1131  a30 d
1132  a30 d
1133  a30 d
1134  a30 d
1135  a30 d
1136  a30 d
1137  a30 d
1138  a30 d
1139  a30 d
1140  a30 d
1141  a30 d
1142  a30 d
1143  a30 d
1144  a30 d
1145  a30 d
1146  a30 d
1147  a30 d
1148  a30 d
1149  a30 d
1150  a30 d
1151  a30 d
1152  a30 d
1153  a30 d
1154  a30 d
1155  a30 d
1156  a30 d
1157  a30 d
1158  a30 d
1159  a30 d
1160  a30 d
1161  a30 d
1162  a30 d
1163  a30 d
1164  a30 d
1165  a30 d
1166  a30 d
1167  a30 d
1168  a30 d
1169  a30 d
1170  a30 d
1171  a30 d
1172  a30 d
1173  a30 d
1174  a30 d
1175  a30 d
1176  a30 d
1177  a30 d
1178  a30 d
1179  a30 d
1180  a30 d
1181  a30 d
1182  a30 d
1183  a30 d
1184  a30 d
1185  a30 d
1186  a30 d
1187  a30 d
1188  a30 d
1189  a30 d
1190  a30 d
1191  a30 d
1192  a30 d
1193  a30 d
1194  a30 d
1195  a30 d
1196  a30 d
1197  a30 d
1198  a30 d
1199  a30 d
1200  a30 d
1201  a30 d
1202  a30 d
1203  a30 d
1204  a30 d
1205  a30 d
1206  a30 d
1207  a30 d
1208  a30 d
1209  a30 d
1210  a30 d
1211  a30 d
1212  a30 d
1213  a30 d
1214  a30 d
1215  a30 d
1216  a30 d
1217  a30 d
1218  a30 d
1219  a30 d
1220  a30 d
1221  a30 d
1222  a30 d
1223  a30 d
1224  a30 d
1225  a30 d
1226  a30 d
1227  a30 d
1228  a30 d
1229  a30 d
1230  a30 d
1231  a30 d
1232  a30 d
1233  a30 d
1234  a30 d
1235  a30 d
1236  a30 d
1237  a30 d
1238  a30 d
1239  a30 d
1240  a30 d
1241  a30 d
1242  a30 d
1243  a30 d
1244  a30 d
1245  a30 d
1246  a30 d
1247  a30 d
1248  a30 d
1249  a30 d
1250  a30 d
1251  a30 d
1252  a30 d
1253  a30 d
1254  a30 d
1255  a30 d
1256  a30 d
1257  a30 d
1258  a30 d
1259  a30 d
1260  a30 d
1261  a30 d
1262  a30 d
1263  a30 d
1264  a30 d
1265  a30 d
1266  a30 d
1267  a30 d
1268  a30 d
1269  a30 d
1270  a30 d
1271  a30 d
1272  a30 d
1273  a30 d
1274  a30 d
1275  a30 d
1276  a30 d
1277  a30 d
1278  a30 d
1279  a30 d
1280  a30 d
1281  a30 d
1282  a30 d
1283  a30 d