| 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) |
| |