module Hat.Array (module Hat.Ix,Array(),garray,aarray,harray,glistArray,alistArray,hlistArray ,(!!),(+!),(*!),gbounds,abounds,hbounds,gindices,gelems,aelems,helems ,gassocs,aassocs,hassocs,gaccumArray,aaccumArray,haccumArray,(!//),(+//) ,(*//),gaccum,aaccum,haccum,gixmap,aixmap,hixmap) where import qualified Hat.PreludeBasic import qualified Prelude import Hat.Hack import qualified Hat.Hat as T import Hat.Hat (WrapVal(wrapVal)) import Hat.Prelude import Hat.Ix import Hat.List ((!\\)) data Array a b = MkArray (T.R (T.Tuple2 a a)) (T.R (T.Fun a b)) instance T.WrapVal ((Array a b)) where wrapVal pwrapVal (kwrapVal@(MkArray (T.R _ z1wrapVal) (T.R _ z2wrapVal))) p = T.R kwrapVal (T.mkValueApp2 p pwrapVal aMkArray z1wrapVal z2wrapVal) garray :: Ix a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Tuple2 a a) (T.Fun (T.List (T.Tuple2 a b)) (Array a b))) harray :: Ix a => (T.R (T.Tuple2 a a)) -> (T.R (T.List (T.Tuple2 a b))) -> T.RefExp -> T.R (Array a b) garray parray p = T.ufun2 aarray parray p harray harray fb fivs p = T.ucif p (T.uap1 T.mkNoSrcPos p (gand T.mkNoSrcPos p) (T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p) (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ f_x f_y p -> T.uccase T.mkNoSrcPos p (let v0v0v0v0v1 (T.R (T.Tuple2 fi _) _) p = T.uap1 T.mkNoSrcPos p (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons (T.uap2 T.mkNoSrcPos p (ginRange T.mkNoSrcPos p) fb fi)) f_y v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1)) f_x)) fivs) (T.fromExpList T.mkNoSrcPos p []))) (T.con2 T.mkNoSrcPos p MkArray aMkArray fb (T.ufun1 T.mkLambda T.mkNoSrcPos p (\ fj p -> T.uccase T.mkNoSrcPos p (let v18v29v23v75v1 (T.R (T.Cons fv (T.R T.List _)) _) p = T.projection T.mkNoSrcPos p fv v18v29v23v75v1 (T.R T.List _) p = T.uwrapForward p (herror (T.fromLitString T.mkNoSrcPos p "Array.!: undefined array element") p) v18v29v23v75v1 _ p = T.uwrapForward p (herror (T.fromLitString T.mkNoSrcPos p "Array.!: multiply defined array element") p) in (v18v29v23v75v1)) (T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p) (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ f_x f_y p -> T.uccase T.mkNoSrcPos p (let v0v0v0v0v1 (T.R (T.Tuple2 fi fv) _) p = T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_filter T.mkNoSrcPos p) (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !== p) fi fj) (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons fv)) f_y v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1)) f_x)) fivs) (T.fromExpList T.mkNoSrcPos p []))))) (T.uwrapForward p (herror (T.fromLitString T.mkNoSrcPos p "Array.array: out-of-range array association") p)) glistArray :: Ix a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Tuple2 a a) (T.Fun (T.List b) (Array a b))) hlistArray :: Ix a => (T.R (T.Tuple2 a a)) -> (T.R (T.List b)) -> T.RefExp -> T.R (Array a b) glistArray plistArray p = T.ufun2 alistArray plistArray p hlistArray hlistArray fb fvs p = T.uwrapForward p (harray fb (T.uwrapForward p (hzipWith (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ fa fb p -> T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2 fa fb)) (T.uap1 T.mkNoSrcPos p (grange T.mkNoSrcPos p) fb) fvs p)) p) (!!) :: Ix a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (Array a b) (T.Fun a b)) (*!) :: Ix a => (T.R (Array a b)) -> T.RefExp -> T.R (T.Fun a b) (!!) (%!) p = T.ufun1 (+!) (%!) p (*!) (*!) (T.R (MkArray _ ff) _) p = T.projection T.mkNoSrcPos p ff (*!) _ p = T.fatal p gbounds :: Ix a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (Array a b) (T.Tuple2 a a)) hbounds :: Ix a => (T.R (Array a b)) -> T.RefExp -> T.R (T.Tuple2 a a) gbounds pbounds p = T.ufun1 abounds pbounds p hbounds hbounds (T.R (MkArray fb _) _) p = T.projection T.mkNoSrcPos p fb hbounds _ p = T.fatal p gindices :: Ix a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (Array a b) (T.List a)) sindices :: Ix a => T.R (T.Fun (Array a b) (T.List a)) gindices pindices p = T.uconstUse pindices p sindices sindices = T.uconstDef T.mkRoot aindices (\ p -> T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !. p) (grange T.mkNoSrcPos p) (gbounds T.mkNoSrcPos p)) gelems :: Ix a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (Array a b) (T.List b)) helems :: Ix a => (T.R (Array a b)) -> T.RefExp -> T.R (T.List b) gelems pelems p = T.ufun1 aelems pelems p helems helems fa p = T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p) (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ f_x f_y p -> T.uccase T.mkNoSrcPos p (let v0v0v0v0v1 fi p = T.uap1 T.mkNoSrcPos p (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !! p) fa fi)) f_y v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1)) f_x)) (T.uap1 T.mkNoSrcPos p (gindices T.mkNoSrcPos p) fa)) (T.fromExpList T.mkNoSrcPos p []) gassocs :: Ix a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (Array a b) (T.List (T.Tuple2 a b))) hassocs :: Ix a => (T.R (Array a b)) -> T.RefExp -> T.R (T.List (T.Tuple2 a b)) gassocs passocs p = T.ufun1 aassocs passocs p hassocs hassocs fa p = T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p) (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ f_x f_y p -> T.uccase T.mkNoSrcPos p (let v0v0v0v0v1 fi p = T.uap1 T.mkNoSrcPos p (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons (T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2 fi (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !! p) fa fi))) f_y v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1)) f_x)) (T.uap1 T.mkNoSrcPos p (gindices T.mkNoSrcPos p) fa)) (T.fromExpList T.mkNoSrcPos p []) (!//) :: Ix a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (Array a b) (T.Fun (T.List (T.Tuple2 a b)) (Array a b))) (*//) :: Ix a => (T.R (Array a b)) -> (T.R (T.List (T.Tuple2 a b))) -> T.RefExp -> T.R (Array a b) (!//) (%//) p = T.ufun2 (+//) (%//) p (*//) (*//) fa fnew_ivs p = T.uwrapForward p (harray (T.uwrapForward p (hbounds fa p)) (T.uwrapForward p (((gold_ivs T.mkNoSrcPos p) *++ fnew_ivs) p)) p) where gold_ivs pold_ivs p = T.uconstUse pold_ivs p sold_ivs sold_ivs = T.uconstDef p a47v20v47v26old_ivs (\ p -> T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p) (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ f_x f_y p -> T.uccase T.mkNoSrcPos p (let v0v0v0v0v1 fi p = T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_filter T.mkNoSrcPos p) (T.uap2 T.mkNoSrcPos p (gnotElem T.mkNoSrcPos p) fi (gnew_is T.mkNoSrcPos p)) (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons (T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2 fi (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !! p) fa fi)))) f_y v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1)) f_x)) (T.uap1 T.mkNoSrcPos p (gindices T.mkNoSrcPos p) fa)) (T.fromExpList T.mkNoSrcPos p [])) gnew_is pnew_is p = T.uconstUse pnew_is p snew_is snew_is = T.uconstDef p a49v20v49v25new_is (\ p -> T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p) (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ f_x f_y p -> T.uccase T.mkNoSrcPos p (let v0v0v0v0v1 (T.R (T.Tuple2 fi _) _) p = T.uap1 T.mkNoSrcPos p (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons fi) f_y v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1)) f_x)) fnew_ivs) (T.fromExpList T.mkNoSrcPos p [])) gaccum :: Ix a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Fun b (T.Fun c b)) (T.Fun (Array a b) (T.Fun (T.List (T.Tuple2 a c)) (Array a b)))) haccum :: Ix a => (T.R (T.Fun b (T.Fun c b))) -> T.RefExp -> T.R (T.Fun (Array a b) (T.Fun (T.List (T.Tuple2 a c)) (Array a b))) gaccum paccum p = T.ufun1 aaccum paccum p haccum haccum ff p = T.uap1 T.mkNoSrcPos p (gfoldl T.mkNoSrcPos p) (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ v53v33v53v64v1 v53v33v53v64v2 p -> case (v53v33v53v64v1,v53v33v53v64v2) of (fa,T.R (T.Tuple2 fi fv) _) -> T.uwrapForward p ((fa *// (T.fromExpList T.mkNoSrcPos p [T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2 fi (T.uap2 T.mkNoSrcPos p ff (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !! p) fa fi) fv)])) p) _ -> T.fatal p)) gaccumArray :: Ix a => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Fun b (T.Fun c b)) (T.Fun b (T.Fun (T.Tuple2 a a) (T.Fun (T.List (T.Tuple2 a c)) (Array a b))))) haccumArray :: Ix a => (T.R (T.Fun b (T.Fun c b))) -> (T.R b) -> (T.R (T.Tuple2 a a)) -> T.RefExp -> T.R (T.Fun (T.List (T.Tuple2 a c)) (Array a b)) gaccumArray paccumArray p = T.ufun3 aaccumArray paccumArray p haccumArray haccumArray ff fz fb p = T.uap2 T.mkNoSrcPos p (gaccum T.mkNoSrcPos p) ff (T.uwrapForward p (harray fb (T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p) (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ f_x f_y p -> T.uccase T.mkNoSrcPos p (let v0v0v0v0v1 fi p = T.uap1 T.mkNoSrcPos p (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons (T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2 fi fz)) f_y v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1)) f_x)) (T.uap1 T.mkNoSrcPos p (grange T.mkNoSrcPos p) fb)) (T.fromExpList T.mkNoSrcPos p [])) p)) gixmap :: (Ix a,Ix b) => T.RefSrcPos -> T.RefExp -> T.R (T.Fun (T.Tuple2 a a) (T.Fun (T.Fun a b) (T.Fun (Array b c) (Array a c)))) hixmap :: (Ix a,Ix b) => (T.R (T.Tuple2 a a)) -> (T.R (T.Fun a b)) -> (T.R (Array b c)) -> T.RefExp -> T.R (Array a c) gixmap pixmap p = T.ufun3 aixmap pixmap p hixmap hixmap fb ff fa p = T.uwrapForward p (harray fb (T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p) (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ f_x f_y p -> T.uccase T.mkNoSrcPos p (let v0v0v0v0v1 fi p = T.uap1 T.mkNoSrcPos p (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons (T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2 fi (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !! p) fa (T.uap1 T.mkNoSrcPos p ff fi)))) f_y v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1)) f_x)) (T.uap1 T.mkNoSrcPos p (grange T.mkNoSrcPos p) fb)) (T.fromExpList T.mkNoSrcPos p [])) p) instance Ix a => Functor ((Array a)) where gfmap pfmap p = T.ufun2 a64v5v64v46fmap pfmap p hfmap where hfmap ffn (T.R (MkArray fb ff) _) p = T.con2 T.mkNoSrcPos p MkArray aMkArray fb (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !. p) ffn ff) hfmap _ _ p = T.fatal p instance (Ix a,Eq b) => Eq ((Array a b)) where (!==) (%==) p = T.ufun2 (++^=^=+^=@==) (%==) p (*==) where (*==) fa fa' p = T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !== p) (T.uwrapForward p (hassocs fa p)) (T.uwrapForward p (hassocs fa' p)) instance (Ix a,Ord b) => Ord ((Array a b)) where (!<=) (%<=) p = T.ufun2 (+^!=^=^!=@<=) (%<=) p (*<=) where (*<=) fa fa' p = T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !<= p) (T.uwrapForward p (hassocs fa p)) (T.uwrapForward p (hassocs fa' p)) instance (Ix a,Show a,Show b) => Show ((Array a b)) where gshowsPrec pshowsPrec p = T.ufun2 a73v5v76v35showsPrec pshowsPrec p hshowsPrec where hshowsPrec fp fa p = T.uwrapForward p (hshowParen (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !> p) fp (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p) (T.conInteger T.mkNoSrcPos p 9))) (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !. p) (T.uap1 T.mkNoSrcPos p (gshowString T.mkNoSrcPos p) (T.fromLitString T.mkNoSrcPos p "array ")) (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !. p) (T.uap1 T.mkNoSrcPos p (gshows T.mkNoSrcPos p) (T.uwrapForward p (hbounds fa p))) (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !. p) (T.uap1 T.mkNoSrcPos p (gshowChar T.mkNoSrcPos p) (T.conChar T.mkNoSrcPos p ' ')) (T.uap1 T.mkNoSrcPos p (gshows T.mkNoSrcPos p) (T.uwrapForward p (hassocs fa p)))))) p) instance (Ix a,Read a,Read b) => Read ((Array a b)) where greadsPrec preadsPrec p = T.ufun1 a79v5v80v13readsPrec preadsPrec p hreadsPrec where hreadsPrec fp p = T.uwrapForward p (hreadParen (T.uap2 T.mkNoSrcPos p (T.mkNoSrcPos !> p) fp (T.uap1 T.mkNoSrcPos p (Hat.PreludeBasic.gfromInteger T.mkNoSrcPos p) (T.conInteger T.mkNoSrcPos p 9))) (T.ufun1 T.mkLambda T.mkNoSrcPos p (\ fr p -> T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p) (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ f_x f_y p -> T.uccase T.mkNoSrcPos p (let v0v0v0v0v1 (T.R (T.Tuple2 (T.R (T.Cons (T.R 'a' _) (T.R (T.Cons (T.R 'r' _) (T.R (T.Cons (T.R 'r' _) (T.R (T.Cons (T.R 'a' _) (T.R (T.Cons (T.R 'y' _) (T.R T.List _)) _)) _)) _)) _)) _) fs) _) p = T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p) (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ f_x f_y p -> T.uccase T.mkNoSrcPos p (let v0v0v0v0v1 (T.R (T.Tuple2 fb ft) _) p = T.uap1 T.mkNoSrcPos p (T.uap2 T.mkNoSrcPos p (Hat.Prelude.g_foldr T.mkNoSrcPos p) (T.ufun2 T.mkLambda T.mkNoSrcPos p (\ f_x f_y p -> T.uccase T.mkNoSrcPos p (let v0v0v0v0v1 (T.R (T.Tuple2 fas fu) _) p = T.uap1 T.mkNoSrcPos p (T.pa1 T.Cons T.cn1 T.mkNoSrcPos p T.aCons (T.con2 T.mkNoSrcPos p T.Tuple2 T.aTuple2 (T.uwrapForward p (harray fb fas p)) fu)) f_y v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1)) f_x)) (T.uap1 T.mkNoSrcPos p (greads T.mkNoSrcPos p) ft)) f_y v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1)) f_x)) (T.uap1 T.mkNoSrcPos p (greads T.mkNoSrcPos p) fs)) f_y v0v0v0v0v1 _ p = T.projection T.mkNoSrcPos p f_y in (v0v0v0v0v1)) f_x)) (T.uwrapForward p (hlex fr p))) (T.fromExpList T.mkNoSrcPos p []))) p) tArray = T.mkModule "Array" "Array.hs" Prelude.False aMkArray = T.mkConstructor tArray 120018 120024 3 2 "MkArray" aarray = T.mkVariable tArray 150001 240064 3 2 "array" Prelude.False alistArray = T.mkVariable tArray 270001 270071 3 2 "listArray" Prelude.False (+!) = T.mkVariable tArray 300002 300026 38 1 "!" Prelude.False abounds = T.mkVariable tArray 330001 330026 3 1 "bounds" Prelude.False aindices = T.mkVariable tArray 360001 360039 3 0 "indices" Prelude.False aelems = T.mkVariable tArray 390001 390005 3 1 "elems" Prelude.False aassocs = T.mkVariable tArray 420001 420006 3 1 "assocs" Prelude.False (+//) = T.mkVariable tArray 450003 450004 38 2 "//" Prelude.False aaccum = T.mkVariable tArray 530001 530064 3 1 "accum" Prelude.False aaccumArray = T.mkVariable tArray 570001 570039 3 3 "accumArray" Prelude.False aixmap = T.mkVariable tArray 610001 610029 3 3 "ixmap" Prelude.False a64v5v64v46fmap = T.mkVariable tArray 640005 640046 3 2 "fmap" Prelude.False (++^=^=+^=@==) = T.mkVariable tArray 670007 670008 16 2 "==" Prelude.False (+^!=^=^!=@<=) = T.mkVariable tArray 700007 700008 16 2 "<=" Prelude.False a73v5v76v35showsPrec = T.mkVariable tArray 730005 760035 3 2 "showsPrec" Prelude.False a79v5v80v13readsPrec = T.mkVariable tArray 790005 800013 3 1 "readsPrec" Prelude.False a47v20v47v26old_ivs = T.mkVariable tArray 470020 470026 3 0 "old_ivs" Prelude.True a49v20v49v25new_is = T.mkVariable tArray 490020 490025 3 0 "new_is" Prelude.True