interface Array where {
infixl  9 !;
infixl  9 //;

{-# NEED #-}
instance (Ix.Ix a) => Prelude.Functor (Array a);

{-# NEED #-}
instance (Ix.Ix a,Prelude.Ord a,Prelude.Ord b) => Prelude.Ord (Array a b);

{-# NEED #-}
instance (Ix.Ix a,Prelude.Eq a,Prelude.Eq b) => Prelude.Eq (Array a b);

{-# NEED #-}
instance (Ix.Ix a,Prelude.Read a,Prelude.Read b) => Prelude.Read (Array a b);

{-# NEED #-}
instance (Ix.Ix a,Prelude.Show a,Prelude.Show b) => Prelude.Show (Array a b);

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c,Ix.Ix d) => Ix.Ix (a,b,c,d);

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c) => Ix.Ix (a,b,c);

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c,Ix.Ix d,Ix.Ix e,Ix.Ix f,Ix.Ix g,Ix.Ix h,Ix.Ix i,Ix.Ix j) => Ix.Ix (a,b,c,d,e,f,g,h,i,j);

{-# NEED #-}
instance Ix.Ix Prelude.Integer;

{-# NEED #-}
instance Ix.Ix Prelude.Char;

{-# NEED #-}
instance Ix.Ix Prelude.Ordering;

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c,Ix.Ix d,Ix.Ix e,Ix.Ix f,Ix.Ix g,Ix.Ix h,Ix.Ix i) => Ix.Ix (a,b,c,d,e,f,g,h,i);

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c,Ix.Ix d,Ix.Ix e,Ix.Ix f,Ix.Ix g,Ix.Ix h) => Ix.Ix (a,b,c,d,e,f,g,h);

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c,Ix.Ix d,Ix.Ix e,Ix.Ix f,Ix.Ix g) => Ix.Ix (a,b,c,d,e,f,g);

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c,Ix.Ix d,Ix.Ix e,Ix.Ix f) => Ix.Ix (a,b,c,d,e,f);

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c,Ix.Ix d,Ix.Ix e) => Ix.Ix (a,b,c,d,e);

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c,Ix.Ix d,Ix.Ix e,Ix.Ix f,Ix.Ix g,Ix.Ix h,Ix.Ix i,Ix.Ix j,Ix.Ix k,Ix.Ix l,Ix.Ix m,Ix.Ix n,Ix.Ix o) => Ix.Ix (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o);

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c,Ix.Ix d,Ix.Ix e,Ix.Ix f,Ix.Ix g,Ix.Ix h,Ix.Ix i,Ix.Ix j,Ix.Ix k,Ix.Ix l,Ix.Ix m,Ix.Ix n) => Ix.Ix (a,b,c,d,e,f,g,h,i,j,k,l,m,n);

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c,Ix.Ix d,Ix.Ix e,Ix.Ix f,Ix.Ix g,Ix.Ix h,Ix.Ix i,Ix.Ix j,Ix.Ix k,Ix.Ix l,Ix.Ix m) => Ix.Ix (a,b,c,d,e,f,g,h,i,j,k,l,m);

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c,Ix.Ix d,Ix.Ix e,Ix.Ix f,Ix.Ix g,Ix.Ix h,Ix.Ix i,Ix.Ix j,Ix.Ix k,Ix.Ix l) => Ix.Ix (a,b,c,d,e,f,g,h,i,j,k,l);

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b,Ix.Ix c,Ix.Ix d,Ix.Ix e,Ix.Ix f,Ix.Ix g,Ix.Ix h,Ix.Ix i,Ix.Ix j,Ix.Ix k) => Ix.Ix (a,b,c,d,e,f,g,h,i,j,k);

{-# NEED #-}
instance Ix.Ix Prelude.Bool;

{-# NEED #-}
instance Ix.Ix Prelude.Int;

{-# NEED #-}
instance (Ix.Ix a,Ix.Ix b) => Ix.Ix (a,b);
interface ! Array
{-# NEED listArray #-}
listArray{-# 2 #-}::(Ix.Ix a) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (a,a)) -> (Prelude.R (Prelude.Trace -> ((Prelude.R [b]) -> (Prelude.R (Array a b))))))))));

{-# NEED accumArray #-}
accumArray{-# 2 #-}::(Ix.Ix c) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (Prelude.Trace -> ((Prelude.R a) -> (Prelude.R (Prelude.Trace -> ((Prelude.R b) -> (Prelude.R a))))))) -> (Prelude.R (Prelude.Trace -> ((Prelude.R a) -> (Prelude.R (Prelude.Trace -> ((Prelude.R (c,c)) -> (Prelude.R (Prelude.Trace -> ((Prelude.R [(c,b)]) -> (Prelude.R (Array c a))))))))))))))));

{-# NEED (!) #-}
(!){-# 2 #-}::(Ix.Ix a) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (Array a b)) -> (Prelude.R (Prelude.Trace -> ((Prelude.R a) -> (Prelude.R b)))))))));
interface ! Ix
{-# NEED _tupleRange #-}
_tupleRange{-# 2 #-}::(Ix.Ix a) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R a) -> (Prelude.R (Prelude.Trace -> ((Prelude.R a) -> (Prelude.R (Prelude.Trace -> ((Prelude.R [(Prelude.Trace -> ((Prelude.R a) -> (Prelude.R b)))]) -> (Prelude.R [b]))))))))))));

{-# NEED _tupleIndex #-}
_tupleIndex{-# 2 #-}::(Ix.Ix a) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R a) -> (Prelude.R (Prelude.Trace -> ((Prelude.R a) -> (Prelude.R (Prelude.Trace -> ((Prelude.R a) -> (Prelude.R (Prelude.Trace -> ((Prelude.R Prelude.Int) -> (Prelude.R Prelude.Int)))))))))))))));
interface ! Array
{-# NEED elems #-}
elems{-# 2 #-}::(Ix.Ix a) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (Array a b)) -> (Prelude.R [b]))))));

{-# NEED indices #-}
indices{-# 2 #-}::(Ix.Ix a) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (Array a b)) -> (Prelude.R [a]))))));

{-# NEED bounds #-}
bounds{-# 2 #-}::(Ix.Ix a) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (Array a b)) -> (Prelude.R (a,a)))))));

{-# NEED assocs #-}
assocs{-# 2 #-}::(Ix.Ix a) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (Array a b)) -> (Prelude.R [(a,b)]))))));

{-# NEED ixmap #-}
ixmap{-# 2 #-}::(Ix.Ix a,Ix.Ix b) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (a,a)) -> (Prelude.R (Prelude.Trace -> ((Prelude.R (Prelude.Trace -> ((Prelude.R a) -> (Prelude.R b)))) -> (Prelude.R (Prelude.Trace -> ((Prelude.R (Array b c)) -> (Prelude.R (Array a c)))))))))))));

{-# NEED array #-}
array{-# 2 #-}::(Ix.Ix a) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (a,a)) -> (Prelude.R (Prelude.Trace -> ((Prelude.R [(a,b)]) -> (Prelude.R (Array a b))))))))));

{-# NEED accum #-}
accum{-# 2 #-}::(Ix.Ix c) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (Prelude.Trace -> ((Prelude.R a) -> (Prelude.R (Prelude.Trace -> ((Prelude.R b) -> (Prelude.R a))))))) -> (Prelude.R (Prelude.Trace -> ((Prelude.R (Array c a)) -> (Prelude.R (Prelude.Trace -> ((Prelude.R [(c,b)]) -> (Prelude.R (Array c a)))))))))))));

{-# NEED (//) #-}
(//){-# 2 #-}::(Ix.Ix a) => (Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (Array a b)) -> (Prelude.R (Prelude.Trace -> ((Prelude.R [(a,b)]) -> (Prelude.R (Array a b))))))))));

{-# NEED Array #-}
data (Ix.Ix a) => Array a b;
interface ! Ix
{-# NEED {Ix rangeSize range index inRange} #-}
class (Prelude.Ord a) => Ix a where {
  rangeSize{-# 2 #-}::(Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (a,a)) -> (Prelude.R Prelude.Int))))));
  range{-# 2 #-}::(Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (a,a)) -> (Prelude.R [a]))))));
  index{-# 2 #-}::(Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (a,a)) -> (Prelude.R (Prelude.Trace -> ((Prelude.R a) -> (Prelude.R Prelude.Int)))))))));
  inRange{-# 2 #-}::(Prelude.SR -> (Prelude.Trace -> (Prelude.R (Prelude.Trace -> ((Prelude.R (a,a)) -> (Prelude.R (Prelude.Trace -> ((Prelude.R a) -> (Prelude.R Prelude.Bool)))))))));
};
}
