// Extra functions on vectors
module ck/vectorck/vector

import std/core/undivstd/core/undiv

// Note: `@unsafe-vector` is introduced in Koka v3.1.3.

// Unsafe function.
// This function is an internal function in the standard library.
// See <https://koka-lang.github.io/koka/doc/std_core_vector.html>
inline extern unsafe-vectorck/vector/unsafe-vector: forall<a> (n : ssize_t) -> vector<a>(n: ssize_tstd/core/types/ssize_t: V): totalstd/core/types/total: E vectorstd/core/types/vector: V -> V<aa: V>
  c inline "kk_vector_alloc(#1, kk_box_null(), kk_context())"

// Unsafe function.
// This function is an internal function in the standard library.
// See <https://koka-lang.github.io/koka/doc/std_core_vector.html>
inline extern unsafe-idxck/vector/unsafe-idx: forall<a> (v : vector<a>, index : ssize_t) -> a(^v: vectorstd/core/types/vector: V -> V<aa: V>, index: ssize_tstd/core/types/ssize_t: V): totalstd/core/types/total: E aa: V
  c "kk_vector_at_borrow"

// Unsafe function.
// This function is an internal function in the standard library.
// See <https://koka-lang.github.io/koka/doc/std_core_vector.html>
inline extern unsafe-assignck/vector/unsafe-assign: forall<a> (v : vector<a>, index : ssize_t, value : a) -> ()(v: vectorstd/core/types/vector: V -> V<aa: V>, index: ssize_tstd/core/types/ssize_t: V, value: aa: V): totalstd/core/types/total: E (std/core/types/unit: V)std/core/types/unit: V
  c "kk_vector_unsafe_assign"

/// Implementation notes of sort:
/// - The implementation is merge sort.
/// - It is 2 times faster than when we do not use unsafe-* functions.

// Stable sort
pub fun sortck/vector/sort: forall<a,e> (v : vector<a>, @implicit/(<) : (a, a) -> <pure|e> bool) -> <pure|e> vector<a>(vv: vector<$70>: vectorstd/core/types/vector: V -> V<aa: V>, (@implicit/<)?(<): ($70, $70) -> <pure|$71> bool: (aa: V, aa: V) -> <purestd/core/pure: E|ee: E> boolstd/core/types/bool: V)result: -> <pure|1133> vector<1132>: <purestd/core/pure: E|ee: E> vectorstd/core/types/vector: V -> V<aa: V>
  var resres: local-var<$81,vector<$70>> := vv: vector<$70>
  var temptemp: local-var<$81,vector<$70>> := unsafe-vectorck/vector/unsafe-vector: (n : ssize_t) -> <div,exn,local<$81>|$71> vector<$70>((vv: vector<$70>.lengthstd/core/vector/length: (v : vector<$70>) -> <div,exn,local<$81>|$71> int /std/core/int/(/): (x : int, y : int) -> <div,exn,local<$81>|$71> int 2literal: int
dec = 2
hex8 = 0x02
bit8 = 0b00000010
).ssize_tstd/core/int/ssize_t: (i : int) -> <div,exn,local<$81>|$71> ssize_t) var pp: local-var<$81,int> := 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
var l1l1: local-var<$81,int> := 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
var l2l2: local-var<$81,int> := 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
fun looploop: (l : int, r : int) -> <pure,local<$81>|$71> ()(ll: int: intstd/core/types/int: V, rr: int: intstd/core/types/int: V)result: -> <div,exn,local<$81>|$71> () if rr: int -std/core/int/(-): (x : int, y : int) -> <div,exn,local<$81>|$71> int ll: int <=std/core/int/(<=): (x : int, y : int) -> <div,exn,local<$81>|$71> bool 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
then returnreturn: () (std/core/types/Unit: ())std/core/types/Unit: () val mm: int = (ll: int +std/core/int/(+): (x : int, y : int) -> <div,exn,local<$81>|$71> int rr: int) /std/core/int/(/): (x : int, y : int) -> <div,exn,local<$81>|$71> int 2literal: int
dec = 2
hex8 = 0x02
bit8 = 0b00000010
looploop: (l : int, r : int) -> <div,exn,local<$81>|$71> ()(ll: int.pretend-decreasingstd/core/undiv/pretend-decreasing: (x : int) -> <div,exn,local<$81>|$71> int, mm: int) looploop: (l : int, r : int) -> <div,exn,local<$81>|$71> ()(mm: int.pretend-decreasingstd/core/undiv/pretend-decreasing: (x : int) -> <div,exn,local<$81>|$71> int, rr: int) forstd/core/range/for: (start : int, end : int, action : (int) -> <local<$81>,div,exn|$71> ()) -> <local<$81>,div,exn|$71> ()(ll: int, mm: int -std/core/int/(-): (x : int, y : int) -> <local<$81>,div,exn|$71> int 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
) fnfn: (i : int) -> <local<$81>,div,exn|$71> ()(ii: int) temptemp: vector<$70>
?hdiv=iev@286
.unsafe-assignck/vector/unsafe-assign: (v : vector<$70>, index : ssize_t, value : $70) -> <local<$81>,div,exn|$71> ()((ii: int -std/core/int/(-): (x : int, y : int) -> <local<$81>,div,exn|$71> int ll: int).ssize_tstd/core/int/ssize_t: (i : int) -> <local<$81>,div,exn|$71> ssize_t, resres: vector<$70>
?hdiv=iev@317
.unsafe-idxck/vector/unsafe-idx: (v : vector<$70>, index : ssize_t) -> <local<$81>,div,exn|$71> $70(ii: int.ssize_tstd/core/int/ssize_t: (i : int) -> <local<$81>,div,exn|$71> ssize_t)) pp: local-var<$81,int> :=std/core/types/local-set: (v : local-var<$81,int>, assigned : int) -> <local<$81>,div,exn|$71> () ll: int l1l1: local-var<$81,int> :=std/core/types/local-set: (v : local-var<$81,int>, assigned : int) -> <local<$81>,div,exn|$71> () ll: int l2l2: local-var<$81,int> :=std/core/types/local-set: (v : local-var<$81,int>, assigned : int) -> <local<$81>,div,exn|$71> () mm: int whilestd/core/while: (predicate : () -> <div,local<$81>,exn|$71> bool, action : () -> <div,local<$81>,exn|$71> ()) -> <div,local<$81>,exn|$71> () { l1l1: int
?hdiv=iev@386
<std/core/int/(<): (x : int, y : int) -> <local<$81>,div,exn|$71> bool mm: int &&std/core/types/(&&): (x : bool, y : bool) -> <local<$81>,div,exn|$71> bool l2l2: int
?hdiv=iev@434
<std/core/int/(<): (x : int, y : int) -> <local<$81>,div,exn|$71> bool rr: int } val v1v1: $70 = temptemp: vector<$70>
?hdiv=iev@491
.unsafe-idxck/vector/unsafe-idx: (v : vector<$70>, index : ssize_t) -> <local<$81>,div,exn|$71> $70((l1l1: int
?hdiv=iev@513
-std/core/int/(-): (x : int, y : int) -> <local<$81>,div,exn|$71> int ll: int).ssize_tstd/core/int/ssize_t: (i : int) -> <local<$81>,div,exn|$71> ssize_t) val v2v2: $70 = resres: vector<$70>
?hdiv=iev@535
.unsafe-idxck/vector/unsafe-idx: (v : vector<$70>, index : ssize_t) -> <local<$81>,div,exn|$71> $70(l2l2: int
?hdiv=iev@553
.ssize_tstd/core/int/ssize_t: (i : int) -> <local<$81>,div,exn|$71> ssize_t) if mask<local_1: H>{ v2v2: $70 <?(<): ($70, $70) -> <pure|$71> bool v1v1: $70 } then resres: vector<$70>
?hdiv=iev@615
.unsafe-assignck/vector/unsafe-assign: (v : vector<$70>, index : ssize_t, value : $70) -> <local<$81>,div,exn|$71> ()(pp: int
?hdiv=iev@633
.ssize_tstd/core/int/ssize_t: (i : int) -> <local<$81>,div,exn|$71> ssize_t, resres: vector<$70>
?hdiv=iev@654
.unsafe-idxck/vector/unsafe-idx: (v : vector<$70>, index : ssize_t) -> <local<$81>,div,exn|$71> $70(l2l2: int
?hdiv=iev@672
.ssize_tstd/core/int/ssize_t: (i : int) -> <local<$81>,div,exn|$71> ssize_t)) l2l2: local-var<$81,int> :=std/core/types/local-set: (v : local-var<$81,int>, assigned : int) -> <local<$81>,div,exn|$71> () l2l2: int
?hdiv=iev@702
+std/core/int/(+): (x : int, y : int) -> <local<$81>,div,exn|$71> int 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
else resres: vector<$70>
?hdiv=iev@725
.unsafe-assignck/vector/unsafe-assign: (v : vector<$70>, index : ssize_t, value : $70) -> <local<$81>,div,exn|$71> ()(pp: int
?hdiv=iev@743
.ssize_tstd/core/int/ssize_t: (i : int) -> <local<$81>,div,exn|$71> ssize_t, temptemp: vector<$70>
?hdiv=iev@764
.unsafe-idxck/vector/unsafe-idx: (v : vector<$70>, index : ssize_t) -> <local<$81>,div,exn|$71> $70((l1l1: int
?hdiv=iev@786
-std/core/int/(-): (x : int, y : int) -> <local<$81>,div,exn|$71> int ll: int).ssize_tstd/core/int/ssize_t: (i : int) -> <local<$81>,div,exn|$71> ssize_t)) l1l1: local-var<$81,int> :=std/core/types/local-set: (v : local-var<$81,int>, assigned : int) -> <local<$81>,div,exn|$71> () l1l1: int
?hdiv=iev@817
+std/core/int/(+): (x : int, y : int) -> <local<$81>,div,exn|$71> int 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
pp: local-var<$81,int> :=std/core/types/local-set: (v : local-var<$81,int>, assigned : int) -> <local<$81>,div,exn|$71> () pp: int
?hdiv=iev@851
+std/core/int/(+): (x : int, y : int) -> <local<$81>,div,exn|$71> int 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
whilestd/core/while: (predicate : () -> <div,local<$81>,exn|$71> bool, action : () -> <div,local<$81>,exn|$71> ()) -> <div,local<$81>,exn|$71> () { l1l1: int
?hdiv=iev@877
<std/core/int/(<): (x : int, y : int) -> <local<$81>,div,exn|$71> bool mm: int } resres: vector<$70>
?hdiv=iev@934
.unsafe-assignck/vector/unsafe-assign: (v : vector<$70>, index : ssize_t, value : $70) -> <local<$81>,div,exn|$71> ()(pp: int
?hdiv=iev@952
.ssize_tstd/core/int/ssize_t: (i : int) -> <local<$81>,div,exn|$71> ssize_t, temptemp: vector<$70>
?hdiv=iev@973
.unsafe-idxck/vector/unsafe-idx: (v : vector<$70>, index : ssize_t) -> <local<$81>,div,exn|$71> $70((l1l1: int
?hdiv=iev@995
-std/core/int/(-): (x : int, y : int) -> <local<$81>,div,exn|$71> int ll: int).ssize_tstd/core/int/ssize_t: (i : int) -> <local<$81>,div,exn|$71> ssize_t)) l1l1: local-var<$81,int> :=std/core/types/local-set: (v : local-var<$81,int>, assigned : int) -> <local<$81>,div,exn|$71> () l1l1: int
?hdiv=iev@1026
+std/core/int/(+): (x : int, y : int) -> <local<$81>,div,exn|$71> int 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
pp: local-var<$81,int> :=std/core/types/local-set: (v : local-var<$81,int>, assigned : int) -> <local<$81>,div,exn|$71> () pp: int
?hdiv=iev@1057
+std/core/int/(+): (x : int, y : int) -> <local<$81>,div,exn|$71> int
1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
looploop: (l : int, r : int) -> <pure,local<$81>|$71> ()(0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
, vv: vector<$70>.lengthstd/core/vector/length: (v : vector<$70>) -> <div,exn,local<$81>|$71> int) resres: vector<$70>
?hdiv=iev@1094
// Return a vector whose `k`-th (0-based) element is the length of the longest // common prefix of `v` and the suffix starting with `v[k]`. pub fun z-algorithmck/vector/z-algorithm: forall<a> (v : vector<a>, @implicit/(==) : (a, a) -> bool) -> exn vector<int>(vv: vector<$1140>: vectorstd/core/types/vector: V -> V<aa: V>, (@implicit/==)?(==): ($1140, $1140) -> bool: (aa: V, aa: V) -> boolstd/core/types/bool: V)result: -> exn vector<int>: exnstd/core/exn/exn: (E, V) -> V vectorstd/core/types/vector: V -> V<intstd/core/types/int: V> val sizesize: int = vv: vector<$1140>.lengthstd/core/vector/length: (v : vector<$1140>) -> exn int if sizesize: int ==std/core/int/(==): (x : int, y : int) -> exn bool 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
then returnreturn: vector<int> vectorstd/core/vector/vector: (n : int, default : int) -> exn vector<int>(0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
, 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
)std/core/types/Unit: () pretend-no-divstd/core/undiv/pretend-no-div: (action : () -> <div,exn> vector<int>) -> exn vector<int> { var resres: local-var<$1307,vector<int>> := vectorstd/core/vector/vector: (n : int, default : int) -> <div,exn,local<$1307>> vector<int>(sizesize: int, 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
) resres: local-var<$1307,vector<int>>[0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
] := sizesize: int var ii: local-var<$1307,int> := 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
var jj: local-var<$1307,int> := 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
var kk: local-var<$1307,int> := 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
whilestd/core/while: (predicate : () -> <div,local<$1307>,exn> bool, action : () -> <div,local<$1307>,exn> ()) -> <div,local<$1307>,exn> () { ii: int
?hdiv=iev@1403
<std/core/int/(<): (x : int, y : int) -> <local<$1307>,div,exn> bool sizesize: int } whilestd/core/while: (predicate : () -> <div,exn,local<$1307>> bool, action : () -> <div,exn,local<$1307>> ()) -> <div,exn,local<$1307>> () { ii: int
?hdiv=iev@1463
+std/core/int/(+): (x : int, y : int) -> <local<$1307>,exn,div> int jj: int
?hdiv=iev@1482
<std/core/int/(<): (x : int, y : int) -> <local<$1307>,exn,div> bool sizesize: int &&std/core/types/(&&): (x : bool, y : bool) -> <exn,local<$1307>,div> bool vv: vector<$1140>[jj: int
?hdiv=iev@1577
] ==?(==): ($1140, $1140) -> <exn,local<$1307>,div> bool vv: vector<$1140>[ii: int
?hdiv=iev@1669
+std/core/int/(+): (x : int, y : int) -> <local<$1307>,exn,div> int jj: int
?hdiv=iev@1683
] } jj: local-var<$1307,int> :=std/core/types/local-set: (v : local-var<$1307,int>, assigned : int) -> <local<$1307>,div,exn> () jj: int
?hdiv=iev@1719
+std/core/int/(+): (x : int, y : int) -> <local<$1307>,div,exn> int 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
resres: local-var<$1307,vector<int>>[ii: int
?hdiv=iev@1750
] := jj: int
?hdiv=iev@1764
if jj: int
?hdiv=iev@1809
==std/core/int/(==): (x : int, y : int) -> <local<$1307>,div,exn> bool 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
then ii: local-var<$1307,int> :=std/core/types/local-set: (v : local-var<$1307,int>, assigned : int) -> <local<$1307>,div,exn> () ii: int
?hdiv=iev@1931
+std/core/int/(+): (x : int, y : int) -> <local<$1307>,div,exn> int 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
returnreturn: () (std/core/types/Unit: ())std/core/types/Unit: () kk: local-var<$1307,int> :=std/core/types/local-set: (v : local-var<$1307,int>, assigned : int) -> <local<$1307>,div,exn> () 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
whilestd/core/while: (predicate : () -> <div,exn,local<$1307>> bool, action : () -> <div,exn,local<$1307>> ()) -> <div,exn,local<$1307>> () { ii: int
?hdiv=iev@1974
+std/core/int/(+): (x : int, y : int) -> <local<$1307>,exn,div> int kk: int
?hdiv=iev@1993
<std/core/int/(<): (x : int, y : int) -> <local<$1307>,exn,div> bool sizesize: int &&std/core/types/(&&): (x : bool, y : bool) -> <exn,local<$1307>,div> bool kk: int
?hdiv=iev@2041
+std/core/int/(+): (x : int, y : int) -> <exn,local<$1307>,div> int resres: vector<int>
?hdiv=iev@2071
[kk: int
?hdiv=iev@2085
] <std/core/int/(<): (x : int, y : int) -> <exn,local<$1307>,div> bool jj: int
?hdiv=iev@2129
} resres: local-var<$1307,vector<int>>[ii: int
?hdiv=iev@2171
+std/core/int/(+): (x : int, y : int) -> <local<$1307>,exn,div> int kk: int
?hdiv=iev@2185
] := resres: vector<int>
?hdiv=iev@2210
[kk: int
?hdiv=iev@2224
] kk: local-var<$1307,int> :=std/core/types/local-set: (v : local-var<$1307,int>, assigned : int) -> <local<$1307>,exn,div> () kk: int
?hdiv=iev@2257
+std/core/int/(+): (x : int, y : int) -> <local<$1307>,exn,div> int 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
ii: local-var<$1307,int> :=std/core/types/local-set: (v : local-var<$1307,int>, assigned : int) -> <local<$1307>,div,exn> () ii: int
?hdiv=iev@2291
+std/core/int/(+): (x : int, y : int) -> <local<$1307>,div,exn> int kk: int
?hdiv=iev@2305
jj: local-var<$1307,int> :=std/core/types/local-set: (v : local-var<$1307,int>, assigned : int) -> <local<$1307>,div,exn> () jj: int
?hdiv=iev@2335
-std/core/int/(-): (x : int, y : int) -> <local<$1307>,div,exn> int kk: int
?hdiv=iev@2349
resres: vector<int>
?hdiv=iev@2369
} fun naive-searchck/vector/naive-search: forall<a> (v : vector<a>, sub : vector<a>, start : int, @implicit/(==) : (a, a) -> bool) -> exn maybe<int>(vv: vector<$2410>: vectorstd/core/types/vector: V -> V<aa: V>, subsub: vector<$2410>: vectorstd/core/types/vector: V -> V<aa: V>, startstart: int: intstd/core/types/int: V, (@implicit/==)?(==): ($2410, $2410) -> bool: (aa: V, aa: V) -> boolstd/core/types/bool: V)result: -> exn maybe<int>: exnstd/core/exn/exn: (E, V) -> V maybestd/core/types/maybe: V -> V<intstd/core/types/int: V> fun matchingmatching: (i : int, j : int) -> exn bool(ii: int: intstd/core/types/int: V, jj: int: intstd/core/types/int: V)result: -> exn bool: exnstd/core/exn/exn: (E, V) -> V boolstd/core/types/bool: V if jj: int ==std/core/int/(==): (x : int, y : int) -> exn bool subsub: vector<$2410>.lengthstd/core/vector/length: (v : vector<$2410>) -> exn int then returnreturn: bool Truestd/core/types/True: bool if !std/core/types/bool/(!): (b : bool) -> exn bool(vv: vector<$2410>[ii: int +std/core/int/(+): (x : int, y : int) -> exn int jj: int] ==?(==): ($2410, $2410) -> exn bool subsub: vector<$2410>[jj: int]) then returnreturn: bool Falsestd/core/types/False: bool matchingmatching: (i : int, j : int) -> exn bool(ii: int, (jj: int +std/core/int/(+): (x : int, y : int) -> exn int 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
).pretend-decreasingstd/core/undiv/pretend-decreasing: (x : int) -> exn int
) fun looploop: (i : int) -> exn maybe<int>(ii: int: intstd/core/types/int: V)result: -> exn maybe<int>: exnstd/core/exn/exn: (E, V) -> V maybestd/core/types/maybe: V -> V<intstd/core/types/int: V> if ii: int +std/core/int/(+): (x : int, y : int) -> exn int subsub: vector<$2410>.lengthstd/core/vector/length: (v : vector<$2410>) -> exn int >std/core/int/(>): (x : int, y : int) -> exn bool vv: vector<$2410>.lengthstd/core/vector/length: (v : vector<$2410>) -> exn int then returnreturn: maybe<int> Nothingstd/core/types/Nothing: forall<a> maybe<a> if matchingmatching: (i : int, j : int) -> exn bool(ii: int, 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
) then returnreturn: maybe<int> Juststd/core/types/Just: forall<a> (value : a) -> maybe<a>(ii: int)std/core/types/Unit: () looploop: (i : int) -> exn maybe<int>((ii: int +std/core/int/(+): (x : int, y : int) -> exn int 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
).pretend-decreasingstd/core/undiv/pretend-decreasing: (x : int) -> exn int
) if startstart: int <std/core/int/(<): (x : int, y : int) -> exn bool 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
then returnreturn: maybe<int> Nothingstd/core/types/Nothing: forall<a> maybe<a> looploop: (i : int) -> exn maybe<int>(startstart: int
) // Return the position of the first occurrence of `sub` in `v`. // The first element is at position 0 (0-based). // `start` specifies the starting position to search. pub fun searchck/vector/search: forall<a> (v : vector<a>, sub : vector<a>, start : ? int, @implicit/(==) : (a, a) -> bool) -> <div,exn> maybe<int>(vv: vector<$2882>: vectorstd/core/types/vector: V -> V<aa: V>, subsub: vector<$2882>: vectorstd/core/types/vector: V -> V<aa: V>, startstart: ? int: intstd/core/types/int: V = 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
, (@implicit/==)?(==): ($2882, $2882) -> bool: (aa: V, aa: V) -> boolstd/core/types/bool: V)result: -> <div,exn> maybe<int>: <std/core/types/total: Edivstd/core/types/div: X,exnstd/core/exn/exn: (E, V) -> V> maybestd/core/types/maybe: V -> V<intstd/core/types/int: V> // this line improves performance? if subsub: vector<$2882>.lengthstd/core/vector/length: (v : vector<$2882>) -> <exn,div> int <std/core/int/(<): (x : int, y : int) -> <exn,div> bool 16literal: int
dec = 16
hex8 = 0x10
bit8 = 0b00010000
then returnreturn: maybe<int> naive-searchck/vector/naive-search: (v : vector<$2882>, sub : vector<$2882>, start : int, @implicit/(==) : ($2882, $2882) -> bool) -> <exn,div> maybe<int>
?(==)=?(==)
(vv: vector<$2882>, subsub: vector<$2882>, startstart: int)std/core/types/Unit: () if startstart: int <std/core/int/(<): (x : int, y : int) -> <exn,div> bool 0literal: int
dec = 0
hex8 = 0x00
bit8 = 0b00000000
||std/core/types/(||): (x : bool, y : bool) -> <exn,div> bool startstart: int +std/core/int/(+): (x : int, y : int) -> <exn,div> int subsub: vector<$2882>.lengthstd/core/vector/length: (v : vector<$2882>) -> <exn,div> int >std/core/int/(>): (x : int, y : int) -> <exn,div> bool vv: vector<$2882>.lengthstd/core/vector/length: (v : vector<$2882>) -> <exn,div> int then returnreturn: maybe<int> Nothingstd/core/types/Nothing: forall<a> maybe<a> // w = sub + v[start:] val ww: vector<$2882> = vector-initstd/core/vector/vector-init: (n : int, f : (int) -> <exn,div> $2882) -> <exn,div> vector<$2882>( subsub: vector<$2882>.lengthstd/core/vector/length: (v : vector<$2882>) -> <exn,div> int +std/core/int/(+): (x : int, y : int) -> <exn,div> int vv: vector<$2882>.lengthstd/core/vector/length: (v : vector<$2882>) -> <exn,div> int -std/core/int/(-): (x : int, y : int) -> <exn,div> int startstart: int, fnfn: (i : int) -> <exn,div> $2882(ii: int) { if ii: int <std/core/int/(<): (x : int, y : int) -> <exn,div> bool subsub: vector<$2882>.lengthstd/core/vector/length: (v : vector<$2882>) -> <exn,div> int then subsub: vector<$2882>[ii: int] else vv: vector<$2882>[ii: int -std/core/int/(-): (x : int, y : int) -> <exn,div> int subsub: vector<$2882>.lengthstd/core/vector/length: (v : vector<$2882>) -> <exn,div> int +std/core/int/(+): (x : int, y : int) -> <exn,div> int startstart: int] } ) val ll: vector<int> = z-algorithmck/vector/z-algorithm: (v : vector<$2882>, @implicit/(==) : ($2882, $2882) -> bool) -> <exn,div> vector<int>
?(==)=?(==)
(ww: vector<$2882>) fun looploop: (i : int) -> exn maybe<int>(ii: int: intstd/core/types/int: V)result: -> exn maybe<int>: exnstd/core/exn/exn: (E, V) -> V maybestd/core/types/maybe: V -> V<intstd/core/types/int: V> if ii: int +std/core/int/(+): (x : int, y : int) -> exn int subsub: vector<$2882>.lengthstd/core/vector/length: (v : vector<$2882>) -> exn int >std/core/int/(>): (x : int, y : int) -> exn bool vv: vector<$2882>.lengthstd/core/vector/length: (v : vector<$2882>) -> exn int then returnreturn: maybe<int> Nothingstd/core/types/Nothing: forall<a> maybe<a> val foundfound: bool = ll: vector<int>[subsub: vector<$2882>.lengthstd/core/vector/length: (v : vector<$2882>) -> exn int +std/core/int/(+): (x : int, y : int) -> exn int ii: int -std/core/int/(-): (x : int, y : int) -> exn int startstart: int] >=std/core/int/(>=): (x : int, y : int) -> exn bool subsub: vector<$2882>.lengthstd/core/vector/length: (v : vector<$2882>) -> exn int if foundfound: bool then returnreturn: maybe<int> Juststd/core/types/Just: forall<a> (value : a) -> maybe<a>(ii: int)std/core/types/Unit: () looploop: (i : int) -> exn maybe<int>((ii: int +std/core/int/(+): (x : int, y : int) -> exn int 1literal: int
dec = 1
hex8 = 0x01
bit8 = 0b00000001
).pretend-decreasingstd/core/undiv/pretend-decreasing: (x : int) -> exn int
) looploop: (i : int) -> <exn,div> maybe<int>(startstart: int
)