>{-# LANGUAGE NPlusKPatterns #-}>moduleFactorialSequ>where>importData.List>dataSequ1a>=D10(Sequ2(a,a))>|D11a(Sequ2(a,a))>|E1>deriving(Show)>dataSequ2a>=D20(Sequ3(a,a,a))>|D21a(Sequ3(a,a,a))>|D22aa(Sequ3(a,a,a))>|E2>deriving(Show)>dataSequ3a>=D30(Sequ4(a,a,a,a))>|D31a(Sequ4(a,a,a,a))>|D32aa(Sequ4(a,a,a,a))>|D33aaa(Sequ4(a,a,a,a))>|E3>deriving(Show)>dataSequ4a>=D40(Sequ5(a,a,a,a,a))>|D41a(Sequ5(a,a,a,a,a))>|D42aa(Sequ5(a,a,a,a,a))>|D43aaa(Sequ5(a,a,a,a,a))>|D44aaaa(Sequ5(a,a,a,a,a))>|E4>deriving(Show)>dataSequ5a>=D50(Sequ6(a,a,a,a,a,a))>|D51a(Sequ6(a,a,a,a,a,a))>|D52aa(Sequ6(a,a,a,a,a,a))>|D53aaa(Sequ6(a,a,a,a,a,a))>|D54aaaa(Sequ6(a,a,a,a,a,a))>|D55aaaaa(Sequ6(a,a,a,a,a,a))>|E5>deriving(Show)>dataSequ6a>=D60(Sequ7(a,a,a,a,a,a,a))>|D61a(Sequ7(a,a,a,a,a,a,a))>|D62aa(Sequ7(a,a,a,a,a,a,a))>|D63aaa(Sequ7(a,a,a,a,a,a,a))>|D64aaaa(Sequ7(a,a,a,a,a,a,a))>|D65aaaaa(Sequ7(a,a,a,a,a,a,a))>|D66aaaaaa(Sequ7(a,a,a,a,a,a,a))>|E6>deriving(Show)>dataSequ7a=E7>deriving(Show)>ix2(a0,a1)0=a0>ix2(a0,a1)1=a1>>ix3(a0,a1,a2)0=a0>ix3(a0,a1,a2)1=a1>ix3(a0,a1,a2)2=a2>ix4(a0,a1,a2,a3)0=a0>ix4(a0,a1,a2,a3)1=a1>ix4(a0,a1,a2,a3)2=a2>ix4(a0,a1,a2,a3)3=a3>ix5(a0,a1,a2,a3,a4)0=a0>ix5(a0,a1,a2,a3,a4)1=a1>ix5(a0,a1,a2,a3,a4)2=a2>ix5(a0,a1,a2,a3,a4)3=a3>ix5(a0,a1,a2,a3,a4)4=a4>ix6(a0,a1,a2,a3,a4,a5)0=a0>ix6(a0,a1,a2,a3,a4,a5)1=a1>ix6(a0,a1,a2,a3,a4,a5)2=a2>ix6(a0,a1,a2,a3,a4,a5)3=a3>ix6(a0,a1,a2,a3,a4,a5)4=a4>ix6(a0,a1,a2,a3,a4,a5)5=a5>ix7(a0,a1,a2,a3,a4,a5,a6)0=a0>ix7(a0,a1,a2,a3,a4,a5,a6)1=a1>ix7(a0,a1,a2,a3,a4,a5,a6)2=a2>ix7(a0,a1,a2,a3,a4,a5,a6)3=a3>ix7(a0,a1,a2,a3,a4,a5,a6)4=a4>ix7(a0,a1,a2,a3,a4,a5,a6)5=a5>ix7(a0,a1,a2,a3,a4,a5,a6)6=a6>cons1a0(D10s)=D11a0s>cons1a0(D11a1s)=D10(cons2(a0,a1)s)>cons1a0(E1)=D11a0E2>cons2a0(D20s)=D21a0s>cons2a0(D21a1s)=D22a0a1s>cons2a0(D22a1a2s)=D20(cons3(a0,a1,a2)s)>cons2a0(E2)=D21a0E3>cons3a0(D30s)=D31a0s>cons3a0(D31a1s)=D32a0a1s>cons3a0(D32a1a2s)=D33a0a1a2s>cons3a0(D33a1a2a3s)=D30(cons4(a0,a1,a2,a3)s)>cons3a0(E3)=D31a0E4>cons4a0(D40s)=D41a0s>cons4a0(D41a1s)=D42a0a1s>cons4a0(D42a1a2s)=D43a0a1a2s>cons4a0(D43a1a2a3s)=D44a0a1a2a3s>cons4a0(D44a1a2a3a4s)=D40(cons5(a0,a1,a2,a3,a4)s)>cons4a0(E4)=D41a0E5>cons5a0(D50s)=D51a0s>cons5a0(D51a1s)=D52a0a1s>cons5a0(D52a1a2s)=D53a0a1a2s>cons5a0(D53a1a2a3s)=D54a0a1a2a3s>cons5a0(D54a1a2a3a4s)=D55a0a1a2a3a4s>cons5a0(D55a1a2a3a4a5s)=D50(cons6(a0,a1,a2,a3,a4,a5)s)>cons5a0(E5)=D51a0E6>cons6a0(D60s)=D61a0s>cons6a0(D61a1s)=D62a0a1s>cons6a0(D62a1a2s)=D63a0a1a2s>cons6a0(D63a1a2a3s)=D64a0a1a2a3s>cons6a0(D64a1a2a3a4s)=D65a0a1a2a3a4s>cons6a0(D65a1a2a3a4a5s)=D66a0a1a2a3a4a5s>cons6a0(D66a1a2a3a4a5a6s)=D60(cons7(a0,a1,a2,a3,a4,a5,a6)s)>cons6a0(E6)=D61a0E7>cons7a0E7=E7>lookup1n(D10s)=lookup2(n`div`2)s`ix2`(n`mod`2)>lookup10(D11a0s)=a0>lookup1(n+1)(D11a0s)=lookup2(n`div`2)s`ix2`(n`mod`2)>lookup1n(E1)=error"out of bounds">lookup2n(D20s)=lookup3(n`div`3)s`ix3`(n`mod`3)>lookup20(D21a0s)=a0>lookup2(n+1)(D21a0s)=lookup3(n`div`3)s`ix3`(n`mod`3)>lookup20(D22a0a1s)=a0>lookup21(D22a0a1s)=a1>lookup2(n+2)(D22a0a1s)=lookup3(n`div`3)s`ix3`(n`mod`3)>lookup2n(E2)=error"out of bounds">lookup3n(D30s)=lookup4(n`div`4)s`ix4`(n`mod`4)>lookup30(D31a0s)=a0>lookup3(n+1)(D31a0s)=lookup4(n`div`4)s`ix4`(n`mod`4)>lookup30(D32a0a1s)=a0>lookup31(D32a0a1s)=a1>lookup3(n+2)(D32a0a1s)=lookup4(n`div`4)s`ix4`(n`mod`4)>lookup30(D33a0a1a2s)=a0>lookup31(D33a0a1a2s)=a1>lookup32(D33a0a1a2s)=a2>lookup3(n+3)(D33a0a1a2s)=lookup4(n`div`4)s`ix4`(n`mod`4)>lookup3n(E3)=error"out of bounds">lookup4n(D40s)=lookup5(n`div`5)s`ix5`(n`mod`5)>lookup40(D41a0s)=a0>lookup4(n+1)(D41a0s)=lookup5(n`div`5)s`ix5`(n`mod`5)>lookup40(D42a0a1s)=a0>lookup41(D42a0a1s)=a1>lookup4(n+2)(D42a0a1s)=lookup5(n`div`5)s`ix5`(n`mod`5)>lookup40(D43a0a1a2s)=a0>lookup41(D43a0a1a2s)=a1>lookup42(D43a0a1a2s)=a2>lookup4(n+3)(D43a0a1a2s)=lookup5(n`div`5)s`ix5`(n`mod`5)>lookup40(D44a0a1a2a3s)=a0>lookup41(D44a0a1a2a3s)=a1>lookup42(D44a0a1a2a3s)=a2>lookup43(D44a0a1a2a3s)=a3>lookup4(n+4)(D44a0a1a2a3s)=lookup5(n`div`5)s`ix5`(n`mod`5)>lookup5n(D50s)=lookup6(n`div`6)s`ix6`(n`mod`6)>lookup50(D51a0s)=a0>lookup5(n+1)(D51a0s)=lookup6(n`div`6)s`ix6`(n`mod`6)>lookup50(D52a0a1s)=a0>lookup51(D52a0a1s)=a1>lookup5(n+2)(D52a0a1s)=lookup6(n`div`6)s`ix6`(n`mod`6)>lookup50(D53a0a1a2s)=a0>lookup51(D53a0a1a2s)=a1>lookup52(D53a0a1a2s)=a2>lookup5(n+3)(D53a0a1a2s)=lookup6(n`div`6)s`ix6`(n`mod`6)>lookup50(D54a0a1a2a3s)=a0>lookup51(D54a0a1a2a3s)=a1>lookup52(D54a0a1a2a3s)=a2>lookup53(D54a0a1a2a3s)=a3>lookup5(n+4)(D54a0a1a2a3s)=lookup6(n`div`6)s`ix6`(n`mod`6)>lookup50(D55a0a1a2a3a4s)=a0>lookup51(D55a0a1a2a3a4s)=a1>lookup52(D55a0a1a2a3a4s)=a2>lookup53(D55a0a1a2a3a4s)=a3>lookup54(D55a0a1a2a3a4s)=a4>lookup5(n+5)(D55a0a1a2a3a4s)=lookup6(n`div`6)s`ix6`(n`mod`6)>lookup6n(D60s)=lookup7(n`div`7)s`ix7`(n`mod`7)>lookup60(D61a0s)=a0>lookup6(n+1)(D61a0s)=lookup7(n`div`7)s`ix7`(n`mod`7)>lookup60(D62a0a1s)=a0>lookup61(D62a0a1s)=a1>lookup6(n+2)(D62a0a1s)=lookup7(n`div`7)s`ix7`(n`mod`7)>lookup60(D63a0a1a2s)=a0>lookup61(D63a0a1a2s)=a1>lookup62(D63a0a1a2s)=a2>lookup6(n+3)(D63a0a1a2s)=lookup7(n`div`7)s`ix7`(n`mod`7)>lookup60(D64a0a1a2a3s)=a0>lookup61(D64a0a1a2a3s)=a1>lookup62(D64a0a1a2a3s)=a2>lookup63(D64a0a1a2a3s)=a3>lookup6(n+4)(D64a0a1a2a3s)=lookup7(n`div`7)s`ix7`(n`mod`7)>lookup60(D65a0a1a2a3a4s)=a0>lookup61(D65a0a1a2a3a4s)=a1>lookup62(D65a0a1a2a3a4s)=a2>lookup63(D65a0a1a2a3a4s)=a3>lookup64(D65a0a1a2a3a4s)=a4>lookup6(n+5)(D65a0a1a2a3a4s)=lookup7(n`div`7)s`ix7`(n`mod`7)>lookup60(D66a0a1a2a3a4a5s)=a0>lookup61(D66a0a1a2a3a4a5s)=a1>lookup62(D66a0a1a2a3a4a5s)=a2>lookup63(D66a0a1a2a3a4a5s)=a3>lookup64(D66a0a1a2a3a4a5s)=a4>lookup65(D66a0a1a2a3a4a5s)=a5>lookup6(n+6)(D66a0a1a2a3a4a5s)=lookup7(n`div`7)s`ix7`(n`mod`7)>lookup7ns=error"out of bounds"
{-# LANGUAGE NPlusKPatterns #-}moduleFactorialSequwhereimportData.ListdataSequ1a=D10(Sequ2(a,a))|D11a(Sequ2(a,a))|E1deriving(Show)dataSequ2a=D20(Sequ3(a,a,a))|D21a(Sequ3(a,a,a))|D22aa(Sequ3(a,a,a))|E2deriving(Show)dataSequ3a=D30(Sequ4(a,a,a,a))|D31a(Sequ4(a,a,a,a))|D32aa(Sequ4(a,a,a,a))|D33aaa(Sequ4(a,a,a,a))|E3deriving(Show)dataSequ4a=D40(Sequ5(a,a,a,a,a))|D41a(Sequ5(a,a,a,a,a))|D42aa(Sequ5(a,a,a,a,a))|D43aaa(Sequ5(a,a,a,a,a))|D44aaaa(Sequ5(a,a,a,a,a))|E4deriving(Show)dataSequ5a=D50(Sequ6(a,a,a,a,a,a))|D51a(Sequ6(a,a,a,a,a,a))|D52aa(Sequ6(a,a,a,a,a,a))|D53aaa(Sequ6(a,a,a,a,a,a))|D54aaaa(Sequ6(a,a,a,a,a,a))|D55aaaaa(Sequ6(a,a,a,a,a,a))|E5deriving(Show)dataSequ6a=D60(Sequ7(a,a,a,a,a,a,a))|D61a(Sequ7(a,a,a,a,a,a,a))|D62aa(Sequ7(a,a,a,a,a,a,a))|D63aaa(Sequ7(a,a,a,a,a,a,a))|D64aaaa(Sequ7(a,a,a,a,a,a,a))|D65aaaaa(Sequ7(a,a,a,a,a,a,a))|D66aaaaaa(Sequ7(a,a,a,a,a,a,a))|E6deriving(Show)dataSequ7a=E7deriving(Show)ix2(a0,a1)0=a0ix2(a0,a1)1=a1ix3(a0,a1,a2)0=a0ix3(a0,a1,a2)1=a1ix3(a0,a1,a2)2=a2ix4(a0,a1,a2,a3)0=a0ix4(a0,a1,a2,a3)1=a1ix4(a0,a1,a2,a3)2=a2ix4(a0,a1,a2,a3)3=a3ix5(a0,a1,a2,a3,a4)0=a0ix5(a0,a1,a2,a3,a4)1=a1ix5(a0,a1,a2,a3,a4)2=a2ix5(a0,a1,a2,a3,a4)3=a3ix5(a0,a1,a2,a3,a4)4=a4ix6(a0,a1,a2,a3,a4,a5)0=a0ix6(a0,a1,a2,a3,a4,a5)1=a1ix6(a0,a1,a2,a3,a4,a5)2=a2ix6(a0,a1,a2,a3,a4,a5)3=a3ix6(a0,a1,a2,a3,a4,a5)4=a4ix6(a0,a1,a2,a3,a4,a5)5=a5ix7(a0,a1,a2,a3,a4,a5,a6)0=a0ix7(a0,a1,a2,a3,a4,a5,a6)1=a1ix7(a0,a1,a2,a3,a4,a5,a6)2=a2ix7(a0,a1,a2,a3,a4,a5,a6)3=a3ix7(a0,a1,a2,a3,a4,a5,a6)4=a4ix7(a0,a1,a2,a3,a4,a5,a6)5=a5ix7(a0,a1,a2,a3,a4,a5,a6)6=a6cons1a0(D10s)=D11a0scons1a0(D11a1s)=D10(cons2(a0,a1)s)cons1a0(E1)=D11a0E2cons2a0(D20s)=D21a0scons2a0(D21a1s)=D22a0a1scons2a0(D22a1a2s)=D20(cons3(a0,a1,a2)s)cons2a0(E2)=D21a0E3cons3a0(D30s)=D31a0scons3a0(D31a1s)=D32a0a1scons3a0(D32a1a2s)=D33a0a1a2scons3a0(D33a1a2a3s)=D30(cons4(a0,a1,a2,a3)s)cons3a0(E3)=D31a0E4cons4a0(D40s)=D41a0scons4a0(D41a1s)=D42a0a1scons4a0(D42a1a2s)=D43a0a1a2scons4a0(D43a1a2a3s)=D44a0a1a2a3scons4a0(D44a1a2a3a4s)=D40(cons5(a0,a1,a2,a3,a4)s)cons4a0(E4)=D41a0E5cons5a0(D50s)=D51a0scons5a0(D51a1s)=D52a0a1scons5a0(D52a1a2s)=D53a0a1a2scons5a0(D53a1a2a3s)=D54a0a1a2a3scons5a0(D54a1a2a3a4s)=D55a0a1a2a3a4scons5a0(D55a1a2a3a4a5s)=D50(cons6(a0,a1,a2,a3,a4,a5)s)cons5a0(E5)=D51a0E6cons6a0(D60s)=D61a0scons6a0(D61a1s)=D62a0a1scons6a0(D62a1a2s)=D63a0a1a2scons6a0(D63a1a2a3s)=D64a0a1a2a3scons6a0(D64a1a2a3a4s)=D65a0a1a2a3a4scons6a0(D65a1a2a3a4a5s)=D66a0a1a2a3a4a5scons6a0(D66a1a2a3a4a5a6s)=D60(cons7(a0,a1,a2,a3,a4,a5,a6)s)cons6a0(E6)=D61a0E7cons7a0E7=E7lookup1n(D10s)=lookup2(n`div`2)s`ix2`(n`mod`2)lookup10(D11a0s)=a0lookup1(n+1)(D11a0s)=lookup2(n`div`2)s`ix2`(n`mod`2)lookup1n(E1)=error"out of bounds"lookup2n(D20s)=lookup3(n`div`3)s`ix3`(n`mod`3)lookup20(D21a0s)=a0lookup2(n+1)(D21a0s)=lookup3(n`div`3)s`ix3`(n`mod`3)lookup20(D22a0a1s)=a0lookup21(D22a0a1s)=a1lookup2(n+2)(D22a0a1s)=lookup3(n`div`3)s`ix3`(n`mod`3)lookup2n(E2)=error"out of bounds"lookup3n(D30s)=lookup4(n`div`4)s`ix4`(n`mod`4)lookup30(D31a0s)=a0lookup3(n+1)(D31a0s)=lookup4(n`div`4)s`ix4`(n`mod`4)lookup30(D32a0a1s)=a0lookup31(D32a0a1s)=a1lookup3(n+2)(D32a0a1s)=lookup4(n`div`4)s`ix4`(n`mod`4)lookup30(D33a0a1a2s)=a0lookup31(D33a0a1a2s)=a1lookup32(D33a0a1a2s)=a2lookup3(n+3)(D33a0a1a2s)=lookup4(n`div`4)s`ix4`(n`mod`4)lookup3n(E3)=error"out of bounds"lookup4n(D40s)=lookup5(n`div`5)s`ix5`(n`mod`5)lookup40(D41a0s)=a0lookup4(n+1)(D41a0s)=lookup5(n`div`5)s`ix5`(n`mod`5)lookup40(D42a0a1s)=a0lookup41(D42a0a1s)=a1lookup4(n+2)(D42a0a1s)=lookup5(n`div`5)s`ix5`(n`mod`5)lookup40(D43a0a1a2s)=a0lookup41(D43a0a1a2s)=a1lookup42(D43a0a1a2s)=a2lookup4(n+3)(D43a0a1a2s)=lookup5(n`div`5)s`ix5`(n`mod`5)lookup40(D44a0a1a2a3s)=a0lookup41(D44a0a1a2a3s)=a1lookup42(D44a0a1a2a3s)=a2lookup43(D44a0a1a2a3s)=a3lookup4(n+4)(D44a0a1a2a3s)=lookup5(n`div`5)s`ix5`(n`mod`5)lookup5n(D50s)=lookup6(n`div`6)s`ix6`(n`mod`6)lookup50(D51a0s)=a0lookup5(n+1)(D51a0s)=lookup6(n`div`6)s`ix6`(n`mod`6)lookup50(D52a0a1s)=a0lookup51(D52a0a1s)=a1lookup5(n+2)(D52a0a1s)=lookup6(n`div`6)s`ix6`(n`mod`6)lookup50(D53a0a1a2s)=a0lookup51(D53a0a1a2s)=a1lookup52(D53a0a1a2s)=a2lookup5(n+3)(D53a0a1a2s)=lookup6(n`div`6)s`ix6`(n`mod`6)lookup50(D54a0a1a2a3s)=a0lookup51(D54a0a1a2a3s)=a1lookup52(D54a0a1a2a3s)=a2lookup53(D54a0a1a2a3s)=a3lookup5(n+4)(D54a0a1a2a3s)=lookup6(n`div`6)s`ix6`(n`mod`6)lookup50(D55a0a1a2a3a4s)=a0lookup51(D55a0a1a2a3a4s)=a1lookup52(D55a0a1a2a3a4s)=a2lookup53(D55a0a1a2a3a4s)=a3lookup54(D55a0a1a2a3a4s)=a4lookup5(n+5)(D55a0a1a2a3a4s)=lookup6(n`div`6)s`ix6`(n`mod`6)lookup6n(D60s)=lookup7(n`div`7)s`ix7`(n`mod`7)lookup60(D61a0s)=a0lookup6(n+1)(D61a0s)=lookup7(n`div`7)s`ix7`(n`mod`7)lookup60(D62a0a1s)=a0lookup61(D62a0a1s)=a1lookup6(n+2)(D62a0a1s)=lookup7(n`div`7)s`ix7`(n`mod`7)lookup60(D63a0a1a2s)=a0lookup61(D63a0a1a2s)=a1lookup62(D63a0a1a2s)=a2lookup6(n+3)(D63a0a1a2s)=lookup7(n`div`7)s`ix7`(n`mod`7)lookup60(D64a0a1a2a3s)=a0lookup61(D64a0a1a2a3s)=a1lookup62(D64a0a1a2a3s)=a2lookup63(D64a0a1a2a3s)=a3lookup6(n+4)(D64a0a1a2a3s)=lookup7(n`div`7)s`ix7`(n`mod`7)lookup60(D65a0a1a2a3a4s)=a0lookup61(D65a0a1a2a3a4s)=a1lookup62(D65a0a1a2a3a4s)=a2lookup63(D65a0a1a2a3a4s)=a3lookup64(D65a0a1a2a3a4s)=a4lookup6(n+5)(D65a0a1a2a3a4s)=lookup7(n`div`7)s`ix7`(n`mod`7)lookup60(D66a0a1a2a3a4a5s)=a0lookup61(D66a0a1a2a3a4a5s)=a1lookup62(D66a0a1a2a3a4a5s)=a2lookup63(D66a0a1a2a3a4a5s)=a3lookup64(D66a0a1a2a3a4a5s)=a4lookup65(D66a0a1a2a3a4a5s)=a5lookup6(n+6)(D66a0a1a2a3a4a5s)=lookup7(n`div`7)s`ix7`(n`mod`7)lookup7ns=error"out of bounds"
It panics at -O2 with 8.0.2 but doesn't panic with HEAD.
Amazingly, this crashes 8.0.2, because of this egregious bug in SimplUtils.mkCase1:
check_eq (Var v) (DataAlt con) [] = v == dataConWorkId con -- Optimisation only... check_eq rhs (DataAlt con) args = cheapEqExpr' tickishFloatable rhs $ mkConApp con (arg_tys ++ varsToCoreExprs args)
The first of these equations ("optimisation only") is only equivalent to the second if arg_tys is empty, which it isn't in this case.
This bug has been there since I introduced it in Nov 2011:
commit 02ac2974ce8e537372bff8d9e0a6efb461ed2c59Author: Simon Peyton Jones <simonpj@microsoft.com>Date: Wed Nov 16 10:37:47 2011 +0000 Fix CaseIdentity optimisaion In fixing one bug I'd introduced another; case x of { T -> T; F -> F } wasn't getting optmised! Trivial to fix.
It's just rather hard to trigger. Unrelated changes in HEAD mean that it no longer shows up. But I'll fix it anyway!