blob: 014f1ae8eba88e7a3ad82b3fdd54f661c2dddbcd [file]
include <gum/common/wordarray.cogent>
wordarray_create_u8 : (SysState, U32) -> R (SysState, WordArray U8) SysState
wordarray_create_u8 arg = wordarray_create [U8] arg
wordarray_create_nz_u8 : (SysState, U32) -> R (SysState, WordArray U8) SysState
wordarray_create_nz_u8 arg = wordarray_create_nz [U8] arg
wordarray_free_u8 : (SysState, WordArray U8) -> SysState
wordarray_free_u8 arg = wordarray_free [U8] arg
wordarray_get_bounded_u8 : ((WordArray U8)!, WordArrayIndex) -> R U8 ()
wordarray_get_bounded_u8 arg = wordarray_get_bounded [U8] arg
-- type WordArrayModifyF a acc obsv = ElemAO a acc obsv -> (ElemA a acc)
-- type WordArrayModifyP a acc obsv = #{arr: WordArray a, idx: WordArrayIndex, f: WordArrayModifyF a acc obsv, acc: acc, obsv: obsv!}
-- Bool for whether to modify
wordarray_modify_u8 : WordArrayModifyP U8 U8 Bool -> ArrA (WordArray U8) U8
wordarray_modify_u8 arg = wordarray_modify [U8, U8, Bool] arg
modify_body_f : ElemAO U8 U8 Bool -> ElemA U8 U8
modify_body_f #{elem, acc, obsv} =
if obsv then #{elem = elem + acc, acc = elem + acc}
else #{elem, acc}
wordarray_put_u8 : WordArrayPutP U8 -> R (WordArray U8) (WordArray U8)
wordarray_put_u8 arg = wordarray_put [U8] arg
wordarray_length_u8 : (WordArray U8)! -> U32
wordarray_length_u8 arg = wordarray_length [U8] arg
wordarray_clone_u8 : (SysState, (WordArray U8)!) -> R (SysState, WordArray U8) SysState
wordarray_clone_u8 arg = wordarray_clone [U8] arg
wordarray_set_u8 : (WordArray U8, U32, U32, U8) -> WordArray U8
wordarray_set_u8 arg = wordarray_set [U8] arg
wordarray_copy_u8 : (WordArray U8, (WordArray U8)!, WordArrayIndex, WordArrayIndex, U32)
-> WordArray U8
wordarray_copy_u8 arg = wordarray_copy [U8] arg
wordarray_map_u8 : (WordArray U8, U8 -> U8) -> WordArray U8
wordarray_map_u8 arg = wordarray_map_ [U8] arg
map_body_f : U8 -> U8
map_body_f x = x + 1
map_body_g : U8 -> U8
map_body_g x = x * 2
-- type LoopResult a b = <Iterate a|Break b>
-- type LRR acc brk = (acc, LoopResult () brk)
-- type WordArrayMapF a acc obsv rbrk = ElemAO a acc obsv -> LRR (a, acc) rbrk
-- type WordArrayMapP a acc obsv rbrk = #{arr: WordArray a, frm: WordArrayIndex, to: WordArrayIndex, f: WordArrayMapF a acc obsv rbrk, acc: acc, obsv: obsv}
-- type WordArrayMapRE a acc rbrk = LRR (WordArray a, acc) (rbrk)
-- wordarray_map_u8 : #{ arr : WordArray U8, f : U8 -> U8 } -> WordArray U8
-- wordarray_map_u8 #{arr, f} =
-- fst o fst $ wordarray_map #{arr, frm = 0, to = wordarray_length arr, f = mapper_u8 f, acc = (), obsv = ()}
--
-- mapper_u8 : (U8 -> U8) -> WordArrayMapF U8 () () ()
-- mapper_u8 f = \ #{elem, acc, obsv} => ((), Iterate $ f elem)