abstype ralist (a:t@ype+, int)
exception RandomAccessListSubscriptException
fun{a:t@ype} ralist_length {n:nat} (xs: ralist (a, n)):<> int n
fun{a:t@ype} ralist_head {n:pos} (xs: ralist (a, n)):<> a
fun{a:t@ype} ralist_head_exn {n:nat} (xs: ralist (a, n)):<!exn> a
fun{a:t@ype} ralist_tail {n:pos}
(xs: ralist (a, n)):<> ralist (a, n-1)
fun{a:t@ype} ralist_tail_exn {n:nat}
(xs: ralist (a, n)):<!exn> [n>0] ralist (a, n-1)
fun{a:t@ype} ralist_cons {n:nat}
(x: a, xs: ralist (a, n)):<> ralist (a, n+1)
fun{a:t@ype} ralist_uncons {n:pos}
(xs: ralist (a, n)):<> @(a, ralist (a, n-1))
fun{a:t@ype} ralist_uncons_exn {n:pos}
(xs: ralist (a, n)):<!exn> [n>0] @(a, ralist (a, n-1))
fun{a:t@ype} ralist_last {n:pos} (xs: ralist (a, n)):<> a
fun{a:t@ype} ralist_last_exn {n:nat} (xs: ralist (a, n)):<!exn> a
fun{a:t@ype} ralist_init {n:pos}
(xs: ralist (a, n)):<> ralist (a, n-1)
fun{a:t@ype} ralist_init_exn {n:nat}
(xs: ralist (a, n)):<!exn> [n>0] ralist (a, n-1)
fun{a:t@ype} ralist_snoc {n:nat}
(x: a, xs: ralist (a, n)):<> ralist (a, n+1)
fun{a:t@ype} ralist_unsnoc {n:pos}
(xs: ralist (a, n)):<> @(ralist (a, n-1), a)
fun{a:t@ype} ralist_unsnoc_exn {n:pos}
(xs: ralist (a, n)):<!exn> [n>0] @(ralist (a, n-1), a)
fun{a:t@ype} ralist_lookup {n:nat}
(xs: ralist (a, n), i: natLt n):<> a
fun{a:t@ype} ralist_lookup_exn {n:nat}
(xs: ralist (a, n), i: Nat):<!exn> a
fun{a:t@ype} ralist_update {n:nat}
(xs: ralist (a, n), i: natLt n, x: a):<> ralist (a, n)
fun{a:t@ype} ralist_update_exn {n:nat}
(xs: ralist (a, n), i: Nat, x: a):<!exn> ralist (a, n)