From 85310fb83fdb7d7294bd453026102fc42000bf14 Mon Sep 17 00:00:00 2001 From: Joshua Price <2855417+ElderEphemera@users.noreply.github.com> Date: Sun, 28 Jun 2020 00:52:48 -0400 Subject: Add missing Ix instances for tuples of size 6 through 15 (#16643) --- libraries/base/GHC/Ix.hs | 427 +++++++++++++++++++++++++++++++++++++ libraries/base/changelog.md | 2 + libraries/base/tests/T16643.hs | 23 ++ libraries/base/tests/T16643.stdout | 1 + libraries/base/tests/all.T | 1 + 5 files changed, 454 insertions(+) create mode 100644 libraries/base/tests/T16643.hs create mode 100644 libraries/base/tests/T16643.stdout (limited to 'libraries/base') diff --git a/libraries/base/GHC/Ix.hs b/libraries/base/GHC/Ix.hs index efd64670bb..6080f1e9b4 100644 --- a/libraries/base/GHC/Ix.hs +++ b/libraries/base/GHC/Ix.hs @@ -324,6 +324,8 @@ instance (Ix a1, Ix a2, Ix a3, Ix a4) => Ix (a1,a2,a3,a4) where inRange (l3,u3) i3 && inRange (l4,u4) i4 -- Default method for index + +---------------------------------------------------------------------- -- | @since 2.01 instance (Ix a1, Ix a2, Ix a3, Ix a4, Ix a5) => Ix (a1,a2,a3,a4,a5) where range ((l1,l2,l3,l4,l5),(u1,u2,u3,u4,u5)) = @@ -346,3 +348,428 @@ instance (Ix a1, Ix a2, Ix a3, Ix a4, Ix a5) => Ix (a1,a2,a3,a4,a5) where inRange (l5,u5) i5 -- Default method for index + +---------------------------------------------------------------------- +-- | @since 4.15.0.0 +instance (Ix a1, Ix a2, Ix a3, Ix a4, Ix a5, Ix a6) => + Ix (a1,a2,a3,a4,a5,a6) where + range ((l1,l2,l3,l4,l5,l6),(u1,u2,u3,u4,u5,u6)) = + [(i1,i2,i3,i4,i5,i6) | i1 <- range (l1,u1), + i2 <- range (l2,u2), + i3 <- range (l3,u3), + i4 <- range (l4,u4), + i5 <- range (l5,u5), + i6 <- range (l6,u6)] + + unsafeIndex ((l1,l2,l3,l4,l5,l6),(u1,u2,u3,u4,u5,u6)) (i1,i2,i3,i4,i5,i6) = + unsafeIndex (l6,u6) i6 + unsafeRangeSize (l6,u6) * ( + unsafeIndex (l5,u5) i5 + unsafeRangeSize (l5,u5) * ( + unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * ( + unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * ( + unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * ( + unsafeIndex (l1,u1) i1))))) + + inRange ((l1,l2,l3,l4,l5,l6),(u1,u2,u3,u4,u5,u6)) (i1,i2,i3,i4,i5,i6) = + inRange (l1,u1) i1 && inRange (l2,u2) i2 && + inRange (l3,u3) i3 && inRange (l4,u4) i4 && + inRange (l5,u5) i5 && inRange (l6,u6) i6 + + -- Default method for index + +---------------------------------------------------------------------- +-- | @since 4.15.0.0 +instance (Ix a1, Ix a2, Ix a3, Ix a4, Ix a5, Ix a6, Ix a7) => + Ix (a1,a2,a3,a4,a5,a6,a7) where + range ((l1,l2,l3,l4,l5,l6,l7),(u1,u2,u3,u4,u5,u6,u7)) = + [(i1,i2,i3,i4,i5,i6,i7) | i1 <- range (l1,u1), + i2 <- range (l2,u2), + i3 <- range (l3,u3), + i4 <- range (l4,u4), + i5 <- range (l5,u5), + i6 <- range (l6,u6), + i7 <- range (l7,u7)] + + unsafeIndex ((l1,l2,l3,l4,l5,l6,l7),(u1,u2,u3,u4,u5,u6,u7)) + (i1,i2,i3,i4,i5,i6,i7) = + unsafeIndex (l7,u7) i7 + unsafeRangeSize (l7,u7) * ( + unsafeIndex (l6,u6) i6 + unsafeRangeSize (l6,u6) * ( + unsafeIndex (l5,u5) i5 + unsafeRangeSize (l5,u5) * ( + unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * ( + unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * ( + unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * ( + unsafeIndex (l1,u1) i1)))))) + + inRange ((l1,l2,l3,l4,l5,l6,l7),(u1,u2,u3,u4,u5,u6,u7)) + (i1,i2,i3,i4,i5,i6,i7) = + inRange (l1,u1) i1 && inRange (l2,u2) i2 && + inRange (l3,u3) i3 && inRange (l4,u4) i4 && + inRange (l5,u5) i5 && inRange (l6,u6) i6 && + inRange (l7,u7) i7 + + -- Default method for index + +---------------------------------------------------------------------- +-- | @since 4.15.0.0 +instance (Ix a1, Ix a2, Ix a3, Ix a4, Ix a5, Ix a6, Ix a7, Ix a8) => + Ix (a1,a2,a3,a4,a5,a6,a7,a8) where + range ((l1,l2,l3,l4,l5,l6,l7,l8),(u1,u2,u3,u4,u5,u6,u7,u8)) = + [(i1,i2,i3,i4,i5,i6,i7,i8) | i1 <- range (l1,u1), + i2 <- range (l2,u2), + i3 <- range (l3,u3), + i4 <- range (l4,u4), + i5 <- range (l5,u5), + i6 <- range (l6,u6), + i7 <- range (l7,u7), + i8 <- range (l8,u8)] + + unsafeIndex ((l1,l2,l3,l4,l5,l6,l7,l8),(u1,u2,u3,u4,u5,u6,u7,u8)) + (i1,i2,i3,i4,i5,i6,i7,i8) = + unsafeIndex (l8,u8) i8 + unsafeRangeSize (l8,u8) * ( + unsafeIndex (l7,u7) i7 + unsafeRangeSize (l7,u7) * ( + unsafeIndex (l6,u6) i6 + unsafeRangeSize (l6,u6) * ( + unsafeIndex (l5,u5) i5 + unsafeRangeSize (l5,u5) * ( + unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * ( + unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * ( + unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * ( + unsafeIndex (l1,u1) i1))))))) + + inRange ((l1,l2,l3,l4,l5,l6,l7,l8),(u1,u2,u3,u4,u5,u6,u7,u8)) + (i1,i2,i3,i4,i5,i6,i7,i8) = + inRange (l1,u1) i1 && inRange (l2,u2) i2 && + inRange (l3,u3) i3 && inRange (l4,u4) i4 && + inRange (l5,u5) i5 && inRange (l6,u6) i6 && + inRange (l7,u7) i7 && inRange (l8,u8) i8 + + -- Default method for index + +---------------------------------------------------------------------- +-- | @since 4.15.0.0 +instance (Ix a1, Ix a2, Ix a3, Ix a4, Ix a5, Ix a6, Ix a7, Ix a8, Ix a9) => + Ix (a1,a2,a3,a4,a5,a6,a7,a8,a9) where + range ((l1,l2,l3,l4,l5,l6,l7,l8,l9),(u1,u2,u3,u4,u5,u6,u7,u8,u9)) = + [(i1,i2,i3,i4,i5,i6,i7,i8,i9) | i1 <- range (l1,u1), + i2 <- range (l2,u2), + i3 <- range (l3,u3), + i4 <- range (l4,u4), + i5 <- range (l5,u5), + i6 <- range (l6,u6), + i7 <- range (l7,u7), + i8 <- range (l8,u8), + i9 <- range (l9,u9)] + + unsafeIndex ((l1,l2,l3,l4,l5,l6,l7,l8,l9),(u1,u2,u3,u4,u5,u6,u7,u8,u9)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9) = + unsafeIndex (l9,u9) i9 + unsafeRangeSize (l9,u9) * ( + unsafeIndex (l8,u8) i8 + unsafeRangeSize (l8,u8) * ( + unsafeIndex (l7,u7) i7 + unsafeRangeSize (l7,u7) * ( + unsafeIndex (l6,u6) i6 + unsafeRangeSize (l6,u6) * ( + unsafeIndex (l5,u5) i5 + unsafeRangeSize (l5,u5) * ( + unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * ( + unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * ( + unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * ( + unsafeIndex (l1,u1) i1)))))))) + + inRange ((l1,l2,l3,l4,l5,l6,l7,l8,l9),(u1,u2,u3,u4,u5,u6,u7,u8,u9)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9) = + inRange (l1,u1) i1 && inRange (l2,u2) i2 && + inRange (l3,u3) i3 && inRange (l4,u4) i4 && + inRange (l5,u5) i5 && inRange (l6,u6) i6 && + inRange (l7,u7) i7 && inRange (l8,u8) i8 && + inRange (l9,u9) i9 + + -- Default method for index + +---------------------------------------------------------------------- +-- | @since 4.15.0.0 +instance (Ix a1, Ix a2, Ix a3, Ix a4, Ix a5, Ix a6, Ix a7, Ix a8, Ix a9, + Ix aA) => + Ix (a1,a2,a3,a4,a5,a6,a7,a8,a9,aA) where + range ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA),(u1,u2,u3,u4,u5,u6,u7,u8,u9,uA)) = + [(i1,i2,i3,i4,i5,i6,i7,i8,i9,iA) | i1 <- range (l1,u1), + i2 <- range (l2,u2), + i3 <- range (l3,u3), + i4 <- range (l4,u4), + i5 <- range (l5,u5), + i6 <- range (l6,u6), + i7 <- range (l7,u7), + i8 <- range (l8,u8), + i9 <- range (l9,u9), + iA <- range (lA,uA)] + + unsafeIndex ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9,iA) = + unsafeIndex (lA,uA) iA + unsafeRangeSize (lA,uA) * ( + unsafeIndex (l9,u9) i9 + unsafeRangeSize (l9,u9) * ( + unsafeIndex (l8,u8) i8 + unsafeRangeSize (l8,u8) * ( + unsafeIndex (l7,u7) i7 + unsafeRangeSize (l7,u7) * ( + unsafeIndex (l6,u6) i6 + unsafeRangeSize (l6,u6) * ( + unsafeIndex (l5,u5) i5 + unsafeRangeSize (l5,u5) * ( + unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * ( + unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * ( + unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * ( + unsafeIndex (l1,u1) i1))))))))) + + inRange ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA),(u1,u2,u3,u4,u5,u6,u7,u8,u9,uA)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9,iA) = + inRange (l1,u1) i1 && inRange (l2,u2) i2 && + inRange (l3,u3) i3 && inRange (l4,u4) i4 && + inRange (l5,u5) i5 && inRange (l6,u6) i6 && + inRange (l7,u7) i7 && inRange (l8,u8) i8 && + inRange (l9,u9) i9 && inRange (lA,uA) iA + + -- Default method for index + +---------------------------------------------------------------------- +-- | @since 4.15.0.0 +instance (Ix a1, Ix a2, Ix a3, Ix a4, Ix a5, Ix a6, Ix a7, Ix a8, Ix a9, + Ix aA, Ix aB) => + Ix (a1,a2,a3,a4,a5,a6,a7,a8,a9,aA,aB) where + range ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB)) = + [(i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB) | i1 <- range (l1,u1), + i2 <- range (l2,u2), + i3 <- range (l3,u3), + i4 <- range (l4,u4), + i5 <- range (l5,u5), + i6 <- range (l6,u6), + i7 <- range (l7,u7), + i8 <- range (l8,u8), + i9 <- range (l9,u9), + iA <- range (lA,uA), + iB <- range (lB,uB)] + + unsafeIndex ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB) = + unsafeIndex (lB,uB) iB + unsafeRangeSize (lB,uB) * ( + unsafeIndex (lA,uA) iA + unsafeRangeSize (lA,uA) * ( + unsafeIndex (l9,u9) i9 + unsafeRangeSize (l9,u9) * ( + unsafeIndex (l8,u8) i8 + unsafeRangeSize (l8,u8) * ( + unsafeIndex (l7,u7) i7 + unsafeRangeSize (l7,u7) * ( + unsafeIndex (l6,u6) i6 + unsafeRangeSize (l6,u6) * ( + unsafeIndex (l5,u5) i5 + unsafeRangeSize (l5,u5) * ( + unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * ( + unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * ( + unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * ( + unsafeIndex (l1,u1) i1)))))))))) + + inRange ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB) = + inRange (l1,u1) i1 && inRange (l2,u2) i2 && + inRange (l3,u3) i3 && inRange (l4,u4) i4 && + inRange (l5,u5) i5 && inRange (l6,u6) i6 && + inRange (l7,u7) i7 && inRange (l8,u8) i8 && + inRange (l9,u9) i9 && inRange (lA,uA) iA && + inRange (lB,uB) iB + + -- Default method for index + +---------------------------------------------------------------------- +-- | @since 4.15.0.0 +instance (Ix a1, Ix a2, Ix a3, Ix a4, Ix a5, Ix a6, Ix a7, Ix a8, Ix a9, + Ix aA, Ix aB, Ix aC) => + Ix (a1,a2,a3,a4,a5,a6,a7,a8,a9,aA,aB,aC) where + range ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB,lC), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB,uC)) = + [(i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC) | i1 <- range (l1,u1), + i2 <- range (l2,u2), + i3 <- range (l3,u3), + i4 <- range (l4,u4), + i5 <- range (l5,u5), + i6 <- range (l6,u6), + i7 <- range (l7,u7), + i8 <- range (l8,u8), + i9 <- range (l9,u9), + iA <- range (lA,uA), + iB <- range (lB,uB), + iC <- range (lC,uC)] + + unsafeIndex ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB,lC), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB,uC)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC) = + unsafeIndex (lC,uC) iC + unsafeRangeSize (lC,uC) * ( + unsafeIndex (lB,uB) iB + unsafeRangeSize (lB,uB) * ( + unsafeIndex (lA,uA) iA + unsafeRangeSize (lA,uA) * ( + unsafeIndex (l9,u9) i9 + unsafeRangeSize (l9,u9) * ( + unsafeIndex (l8,u8) i8 + unsafeRangeSize (l8,u8) * ( + unsafeIndex (l7,u7) i7 + unsafeRangeSize (l7,u7) * ( + unsafeIndex (l6,u6) i6 + unsafeRangeSize (l6,u6) * ( + unsafeIndex (l5,u5) i5 + unsafeRangeSize (l5,u5) * ( + unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * ( + unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * ( + unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * ( + unsafeIndex (l1,u1) i1))))))))))) + + inRange ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB,lC), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB,uC)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC) = + inRange (l1,u1) i1 && inRange (l2,u2) i2 && + inRange (l3,u3) i3 && inRange (l4,u4) i4 && + inRange (l5,u5) i5 && inRange (l6,u6) i6 && + inRange (l7,u7) i7 && inRange (l8,u8) i8 && + inRange (l9,u9) i9 && inRange (lA,uA) iA && + inRange (lB,uB) iB && inRange (lC,uC) iC + + -- Default method for index + +---------------------------------------------------------------------- +-- | @since 4.15.0.0 +instance (Ix a1, Ix a2, Ix a3, Ix a4, Ix a5, Ix a6, Ix a7, Ix a8, Ix a9, + Ix aA, Ix aB, Ix aC, Ix aD) => + Ix (a1,a2,a3,a4,a5,a6,a7,a8,a9,aA,aB,aC,aD) where + range ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB,lC,lD), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB,uC,uD)) = + [(i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC,iD) | i1 <- range (l1,u1), + i2 <- range (l2,u2), + i3 <- range (l3,u3), + i4 <- range (l4,u4), + i5 <- range (l5,u5), + i6 <- range (l6,u6), + i7 <- range (l7,u7), + i8 <- range (l8,u8), + i9 <- range (l9,u9), + iA <- range (lA,uA), + iB <- range (lB,uB), + iC <- range (lC,uC), + iD <- range (lD,uD)] + + unsafeIndex ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB,lC,lD), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB,uC,uD)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC,iD) = + unsafeIndex (lD,uD) iD + unsafeRangeSize (lD,uD) * ( + unsafeIndex (lC,uC) iC + unsafeRangeSize (lC,uC) * ( + unsafeIndex (lB,uB) iB + unsafeRangeSize (lB,uB) * ( + unsafeIndex (lA,uA) iA + unsafeRangeSize (lA,uA) * ( + unsafeIndex (l9,u9) i9 + unsafeRangeSize (l9,u9) * ( + unsafeIndex (l8,u8) i8 + unsafeRangeSize (l8,u8) * ( + unsafeIndex (l7,u7) i7 + unsafeRangeSize (l7,u7) * ( + unsafeIndex (l6,u6) i6 + unsafeRangeSize (l6,u6) * ( + unsafeIndex (l5,u5) i5 + unsafeRangeSize (l5,u5) * ( + unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * ( + unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * ( + unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * ( + unsafeIndex (l1,u1) i1)))))))))))) + + inRange ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB,lC,lD), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB,uC,uD)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC,iD) = + inRange (l1,u1) i1 && inRange (l2,u2) i2 && + inRange (l3,u3) i3 && inRange (l4,u4) i4 && + inRange (l5,u5) i5 && inRange (l6,u6) i6 && + inRange (l7,u7) i7 && inRange (l8,u8) i8 && + inRange (l9,u9) i9 && inRange (lA,uA) iA && + inRange (lB,uB) iB && inRange (lC,uC) iC && + inRange (lD,uD) iD + + -- Default method for index + +---------------------------------------------------------------------- +-- | @since 4.15.0.0 +instance (Ix a1, Ix a2, Ix a3, Ix a4, Ix a5, Ix a6, Ix a7, Ix a8, Ix a9, + Ix aA, Ix aB, Ix aC, Ix aD, Ix aE) => + Ix (a1,a2,a3,a4,a5,a6,a7,a8,a9,aA,aB,aC,aD,aE) where + range ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB,lC,lD,lE), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB,uC,uD,uE)) = + [(i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC,iD,iE) | i1 <- range (l1,u1), + i2 <- range (l2,u2), + i3 <- range (l3,u3), + i4 <- range (l4,u4), + i5 <- range (l5,u5), + i6 <- range (l6,u6), + i7 <- range (l7,u7), + i8 <- range (l8,u8), + i9 <- range (l9,u9), + iA <- range (lA,uA), + iB <- range (lB,uB), + iC <- range (lC,uC), + iD <- range (lD,uD), + iE <- range (lE,uE)] + + unsafeIndex ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB,lC,lD,lE), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB,uC,uD,uE)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC,iD,iE) = + unsafeIndex (lE,uE) iE + unsafeRangeSize (lE,uE) * ( + unsafeIndex (lD,uD) iD + unsafeRangeSize (lD,uD) * ( + unsafeIndex (lC,uC) iC + unsafeRangeSize (lC,uC) * ( + unsafeIndex (lB,uB) iB + unsafeRangeSize (lB,uB) * ( + unsafeIndex (lA,uA) iA + unsafeRangeSize (lA,uA) * ( + unsafeIndex (l9,u9) i9 + unsafeRangeSize (l9,u9) * ( + unsafeIndex (l8,u8) i8 + unsafeRangeSize (l8,u8) * ( + unsafeIndex (l7,u7) i7 + unsafeRangeSize (l7,u7) * ( + unsafeIndex (l6,u6) i6 + unsafeRangeSize (l6,u6) * ( + unsafeIndex (l5,u5) i5 + unsafeRangeSize (l5,u5) * ( + unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * ( + unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * ( + unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * ( + unsafeIndex (l1,u1) i1))))))))))))) + + inRange ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB,lC,lD,lE), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB,uC,uD,uE)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC,iD,iE) = + inRange (l1,u1) i1 && inRange (l2,u2) i2 && + inRange (l3,u3) i3 && inRange (l4,u4) i4 && + inRange (l5,u5) i5 && inRange (l6,u6) i6 && + inRange (l7,u7) i7 && inRange (l8,u8) i8 && + inRange (l9,u9) i9 && inRange (lA,uA) iA && + inRange (lB,uB) iB && inRange (lC,uC) iC && + inRange (lD,uD) iD && inRange (lE,uE) iE + + -- Default method for index + +---------------------------------------------------------------------- +-- | @since 4.15.0.0 +instance (Ix a1, Ix a2, Ix a3, Ix a4, Ix a5, Ix a6, Ix a7, Ix a8, Ix a9, + Ix aA, Ix aB, Ix aC, Ix aD, Ix aE, Ix aF) => + Ix (a1,a2,a3,a4,a5,a6,a7,a8,a9,aA,aB,aC,aD,aE,aF) where + range ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB,lC,lD,lE,lF), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB,uC,uD,uE,uF)) = + [(i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC,iD,iE,iF) | i1 <- range (l1,u1), + i2 <- range (l2,u2), + i3 <- range (l3,u3), + i4 <- range (l4,u4), + i5 <- range (l5,u5), + i6 <- range (l6,u6), + i7 <- range (l7,u7), + i8 <- range (l8,u8), + i9 <- range (l9,u9), + iA <- range (lA,uA), + iB <- range (lB,uB), + iC <- range (lC,uC), + iD <- range (lD,uD), + iE <- range (lE,uE), + iF <- range (lF,uF)] + + unsafeIndex ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB,lC,lD,lE,lF), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB,uC,uD,uE,uF)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC,iD,iE,iF) = + unsafeIndex (lF,uF) iF + unsafeRangeSize (lF,uF) * ( + unsafeIndex (lE,uE) iE + unsafeRangeSize (lE,uE) * ( + unsafeIndex (lD,uD) iD + unsafeRangeSize (lD,uD) * ( + unsafeIndex (lC,uC) iC + unsafeRangeSize (lC,uC) * ( + unsafeIndex (lB,uB) iB + unsafeRangeSize (lB,uB) * ( + unsafeIndex (lA,uA) iA + unsafeRangeSize (lA,uA) * ( + unsafeIndex (l9,u9) i9 + unsafeRangeSize (l9,u9) * ( + unsafeIndex (l8,u8) i8 + unsafeRangeSize (l8,u8) * ( + unsafeIndex (l7,u7) i7 + unsafeRangeSize (l7,u7) * ( + unsafeIndex (l6,u6) i6 + unsafeRangeSize (l6,u6) * ( + unsafeIndex (l5,u5) i5 + unsafeRangeSize (l5,u5) * ( + unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * ( + unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * ( + unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * ( + unsafeIndex (l1,u1) i1)))))))))))))) + + inRange ((l1,l2,l3,l4,l5,l6,l7,l8,l9,lA,lB,lC,lD,lE,lF), + (u1,u2,u3,u4,u5,u6,u7,u8,u9,uA,uB,uC,uD,uE,uF)) + (i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC,iD,iE,iF) = + inRange (l1,u1) i1 && inRange (l2,u2) i2 && + inRange (l3,u3) i3 && inRange (l4,u4) i4 && + inRange (l5,u5) i5 && inRange (l6,u6) i6 && + inRange (l7,u7) i7 && inRange (l8,u8) i8 && + inRange (l9,u9) i9 && inRange (lA,uA) iA && + inRange (lB,uB) iB && inRange (lC,uC) iC && + inRange (lD,uD) iD && inRange (lE,uE) iE && + inRange (lF,uF) iF + + -- Default method for index diff --git a/libraries/base/changelog.md b/libraries/base/changelog.md index a0c3234137..5e91f6c79d 100644 --- a/libraries/base/changelog.md +++ b/libraries/base/changelog.md @@ -27,6 +27,8 @@ small lists will now compile to a simple case statement more often. * Add `MonadFix` and `MonadZip` instances for `Complex` + + * Add `Ix` instances for tuples of size 6 through 15 ## 4.14.0.0 *TBA* * Bundled with GHC 8.10.1 diff --git a/libraries/base/tests/T16643.hs b/libraries/base/tests/T16643.hs new file mode 100644 index 0000000000..f66987ca24 --- /dev/null +++ b/libraries/base/tests/T16643.hs @@ -0,0 +1,23 @@ +module Main (main) where + +import Data.Ix + +main :: IO () +main = + if 2^6 == rangeSize r6 && 2^7 == rangeSize r7 && 2^8 == rangeSize r8 && + 2^9 == rangeSize r9 && 2^10 == rangeSize r10 && 2^11 == rangeSize r11 && + 2^12 == rangeSize r12 && 2^13 == rangeSize r13 && 2^14 == rangeSize r14 && + 2^15 == rangeSize r15 + then putStrLn "Success" + else putStrLn "Error in large tuple Ix instances" + where + r6 = ((0,0,0,0,0,0),(1,1,1,1,1,1)) + r7 = ((0,0,0,0,0,0,0),(1,1,1,1,1,1,1)) + r8 = ((0,0,0,0,0,0,0,0),(1,1,1,1,1,1,1,1)) + r9 = ((0,0,0,0,0,0,0,0,0),(1,1,1,1,1,1,1,1,1)) + r10 = ((0,0,0,0,0,0,0,0,0,0),(1,1,1,1,1,1,1,1,1,1)) + r11 = ((0,0,0,0,0,0,0,0,0,0,0),(1,1,1,1,1,1,1,1,1,1,1)) + r12 = ((0,0,0,0,0,0,0,0,0,0,0,0),(1,1,1,1,1,1,1,1,1,1,1,1)) + r13 = ((0,0,0,0,0,0,0,0,0,0,0,0,0),(1,1,1,1,1,1,1,1,1,1,1,1,1)) + r14 = ((0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1,1,1,1,1,1,1,1,1,1,1,1,1,1)) + r15 = ((0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)) diff --git a/libraries/base/tests/T16643.stdout b/libraries/base/tests/T16643.stdout new file mode 100644 index 0000000000..51da4200ab --- /dev/null +++ b/libraries/base/tests/T16643.stdout @@ -0,0 +1 @@ +Success \ No newline at end of file diff --git a/libraries/base/tests/all.T b/libraries/base/tests/all.T index 6651b20abe..04082e7b6e 100644 --- a/libraries/base/tests/all.T +++ b/libraries/base/tests/all.T @@ -254,3 +254,4 @@ test('T16111', exit_code(1), compile_and_run, ['']) test('T16943a', normal, compile_and_run, ['']) test('T16943b', normal, compile_and_run, ['']) test('T17499', [collect_stats('bytes allocated',5)], compile_and_run, ['-O -w']) +test('T16643', normal, compile_and_run, ['']) -- cgit v1.2.1