hat-2.7.0.0: Hat/Array.hs
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