core¶
boolean.wake¶
- def !(x: Boolean): Boolean¶
Unary operator for Boolean NOT.
` !True = False !False = True `Parameters:
x: BooleanReturn Type:
Boolean
- def (x: Boolean) && (y: Boolean): Boolean¶
Binary operator for Boolean AND; x && y. Both x and y must be True to return True.
## BEWARE: unlike other languages, in wake, expression ‘y’ is evaluated even if ‘x’ is False ##
` True && True = True False && True = False True && False = False False && False = False `Parameters:
x: Boolean, y: BooleanReturn Type:
Boolean
- def (x: Boolean) || (y: Boolean): Boolean¶
Binary operator for Boolean OR; x || y. Either x or y must be True to return True.
## BEWARE: unlike other languages, in wake, expression ‘y’ is evaluated even if ‘x’ is True ##
` True || True = True False || True = True True || False = True False || False = False `Parameters:
x: Boolean, y: BooleanReturn Type:
Boolean
- def eor (x: Boolean) (y: Boolean): Boolean¶
Binary operator for Boolean XOR/EOR; eor x y. When x and y differ, returns True.
` eor True True = False eor False True = True eor True False = True eor False False = False `Parameters:
x: Boolean, y: BooleanReturn Type:
Boolean
- def enor (x: Boolean) (y: Boolean): Boolean¶
Binary operator for Boolean XNOR/ENOR; enor x y. When x and y are equal, returns True.
` enor True True = True enor False True = False enor True False = False enor False False = True `Parameters:
x: Boolean, y: BooleanReturn Type:
Boolean
- def booleanToInteger (b: Boolean): Integer¶
booleanToInteger: Converts a Boolean to the C equivalent integer
` booleanToInteger True = 1 booleanToInteger False = 0 `Parameters:
b: BooleanReturn Type:
Integer
unsafe.wake¶
- def unsafe_avoid_using_run (x: Unsafe a): a¶
Unwraps an unsafe value into a safe value. This should only be used if there is good reason to escape the unsafe monad and a comment should be given explaining why this should be considered safe.
Parameters:
x: Unsafe aReturn Type:
a
- def makeUnsafe (v: a): Unsafe a¶
Turns an safe value into an unsafe value
Parameters:
v: aReturn Type:
Unsafe a
- def unsafeMap (f: a¶
maps a safe function over an unsafe value.
Examples:
` unsafeMap (_ + 10) (makeUnsafe 10) = makeUnsafe 20 `Parameters:
f: a, b, x: Unsafe aReturn Type:
Unsafe b
- def unsafeApp (f: Unsafe (a¶
Implements application of an unsafe function to an unsafe value. This allows functions that do not take unsafe values to be applied to unsafe values. The effect works well with currying so it allows one to chain the applications. This especially useful for constructing tuples from unsafe values
Example: ``` tuple MyTuple = MyString: String MyInteger: Integer MyOtherString: String
makeUnsafe MyTuple | unsafeApp (makeUnsafe “foo”) | unsafeApp (makeUnsafe 10) | unsafeApp (makeUnsafe “bar”) ```
Parameters:
f: Unsafe a, b, x: Unsafe aReturn Type:
Unsafe b
- def unsafeSubsume (f: a¶
Lets you turn an function returning an unsafe value into a unsafe function that returns a safe value. This let’s you use these functions more naturally in tricky locations like inside of higher order functions with the wrong type.
Example:
` def unsafeFiles = ... def unsafeRunner = ... (unsafeSubsume unsafeFiles) | unsafeFlatMap (\files unsafeRunner | unsafeFlatMap (\runner makePlan ... | setPlanFnOutputs (\_ files outputDir) | runJobWith runner )) `Parameters:
f: a, Unsafe b, Unsafe x: aReturn Type:
b)
- def unsafeFlatMap (f: a¶
Takes a function returning an unsafe value, and maps it over an unsafe value, flattening out the double unsafe before returning. This is equivalent to first using unsafeMap and then calling unsafeFlatten. This might not sound that useful but it winds up being the primary way that unsafe code is composed. It lets you chain multiple unsafe operations togethor in such a way that you can access their pure values inside the mapping function. unsafeFlatMap is unseful in a pipe sequence of unsafe operations.
` def myUnsafeRunner = ... unsafeFlatMap (\runner makePlan "unsafe" Nil "echo foo > foo.txt; echo bar > bar.txt" | setPlanFnOutputs runner ) unsafeRunner `Parameters:
f: a, Unsafe b, x: Unsafe aReturn Type:
Unsafe b
- def unsafeFlatten (x: Unsafe (Unsafe a)): Unsafe a¶
This unwraps a double unsafe into a single unsafe. This sort of type will sometimes appear when mapping a function returning an unsafe value over a safe value. Consider using unsafeFlatMap in that case instead.
Parameters:
x: Unsafe Unsafe aReturn Type:
Unsafe a
- def unsafeRMap (f: a¶
unsafeRMap functions just like rmap but its use is more often required than rmap. This is because while rmap’s can often be replaced with a require in Wake, unsafe results cannot be used with require. In order to cope with this however we can use unsafeRMap. You could use unsafeFlatMap with a pattern match but this can lead to branch expolsion if you have too many cases to deal with.
Parameters:
f: a, Unsafe Result b c, x: Unsafe Result a cReturn Type:
Unsafe (Result b c)
- def unsafeOMap (f: a¶
unsafeOMap functions like omap but for unsafe values. Since using require is not possible unsafe values you may sometimes find it useful to turn to this function instead.
Parameters:
f: a, Unsafe Option b, x: Unsafe Option aReturn Type:
Unsafe (Option b)
vector.wake¶
- def treeToVector (t: Tree a): Vector a¶
treeToVector: converts a
Treeto aVector.Parameters:
t: Tree aReturn Type:
Vector a
- def vempty (v: Vector a): Boolean¶
vempty: returns
Trueif theVectorhas no entries, otherwiseFalse.vempty (vseq 4) = False vempty (vseq 0) = True
Parameters:
v: Vector aReturn Type:
Boolean
- def vlen (v: Vector a): Integer¶
vlen: returns the length of the
Vector.vlen (vseq x) = x vlen [] = 0 vlen [0, 5] = 2
Parameters:
v: Vector aReturn Type:
Integer
- def vsplitAt (index: Integer) (Vector v s e: Vector a): Pair (Vector a) (Vector a)¶
vsplitAt: given an index, cut a Vector into elements before and after the index
vsplitAt 4 (vseq 8) = Pair [0, 1, 2, 3] [4, 5, 6, 7] vsplitAt 0 (vseq 8) = Pair [] [0, 1, 2, 3, 4, 5, 6, 7] vsplitAt 8 (vseq 8) = Pair [0, 1, 2, 3, 4, 5, 6, 7] []
Parameters:
Integer, Vector aReturn Type:
Pair (Vector a) (Vector a)
- def vtake (length: Integer) (v: Vector a): Vector a¶
vtake: keep only the first length elements
vtake 2 (vseq 100) = [0, 1] vtake 0 (vseq 100) = [] vtake 2 (vseq 0) = []
Parameters:
length: Integer, v: Vector aReturn Type:
Vector a
- def vdrop (index: Integer) (v: Vector a): Vector a¶
vdrop: remove elements up to
indexfrom theVectorvdrop 4 (vseq 6) = [4, 5] vdrop 6 (vseq 6) = [] vdrop 0 (vseq 3) = [0, 1, 2]
Parameters:
index: Integer, v: Vector aReturn Type:
Vector a
- def vat (index: Integer) (Vector v s e: Vector a): Option a¶
vat: Returns an
Option, containing either thei``th element of the vector, or ``Noneifiis out of range.vat 4 (vseq 8) = Some 4 vat 4 (vseq 4) = None vat (-1) (vseq 4) = None
Parameters:
Integer, Vector aReturn Type:
Option a
- def vmap (f: a¶
vmap: create a new Vector by applying a function f to each element of a Vector.
vmap str (vseq 5) = [“0”, “1”, “2”, “3”, “4”] vmap (_+10) (vseq 5) = [10, 11, 12, 13, 14]
Parameters:
f: a, b, v: Vector aReturn Type:
Vector b
- def vtab (f: Integer¶
vtab: create a Vector of specified size in parallel by calling f on the index to generate.
vtab (_+100) 5 = [100, 101, 102, 103, 104]
Parameters:
f: Integer, a, length: IntegerReturn Type:
Vector a
- def vfoldl (combiningFn: accum¶
vfoldl: combine the elements of a Vector front-to-back into a single value. An accumulator is updated from its initial value by combiningFn for each element.
In C++ syntax, vfoldl <combiningFn> <accumulateInitalValue> <Vector> does: auto accumulator = <accumulateInitalValue>; for (element : <Vector>) accumulator = combiningFn(accumulator, element); return accumulator;
Examples: vfoldl f x [a, b, c] = f (f (f x a) b) c vfoldl (_+_) 0 (vseq 6) = 15
Parameters:
combiningFn: a, b, a, a, Vector bReturn Type:
a
- def vfoldr (combiningFn: element¶
vfoldr: combine the elements of a Vector back-to-front into a single value. An accumulator is updated from its initial value by combiningFn for each element.
vfoldr f x [a, b, c] = f a (f b (f c x))
Parameters:
combiningFn: a, b, b, b, Vector aReturn Type:
b
- def vmapReduce (mapFn: element¶
vmapReduce: combine the elements of a Vector in parallel Unlike vfold[lr], takes a map function, because reduceFn operates on the same type. reduceFn must be an associative operator; ie: f x (f y z) = f (f x y) z Both the mapFn and reduceFn are called exactly once for each element of the input Vector.
vmapReduce str (“{_}{_}”) “>” (vseq 10) = “>0123456789”
Parameters:
mapFn: a, b, reduceFn: b, b, b, b, Vector aReturn Type:
b
- def vfind (acceptFn: a¶
vfind: find the location of the first element accepted by acceptFn Returns: Pair value index, such that value is at index Once acceptFn returns True, acceptFn is not evaulated on further elements. This means that acceptFn is applied to the Vector mostly sequentially. If more parallelism is desired, use ‘vmap f | vfind (_)’.
def v = vseq 10 | vmap (_+10) vfind (_%4==0) v = Some (Pair 12 2) vfind (_%4==4) v = None
Parameters:
acceptFn: a, Boolean, Vector aReturn Type:
Option (Pair a Integer)
- def vsplitUntil (stopFn: a¶
vsplitUntil: cut the Vector at the point stopFn is first True Once stopFn returns True, stopFn is not evaulated on further elements. This means that stopFn is applied to the List mostly sequentially. If more parallelism is desired, use ‘vmap f | vfind (_)’ and vsplitAt.
vsplitUntil (_>=4) (vseq 8) = Pair [0, 1, 2, 3] [4, 5, 6, 7] vsplitUntil (_>=0) (vseq 8) = Pair [] [0, 1, 2, 3, 4, 5, 6, 7] vsplitUntil (_>=8) (vseq 8) = Pair [0, 1, 2, 3, 4, 5, 6, 7] []
Parameters:
stopFn: a, Boolean, Vector aReturn Type:
Pair (Vector a) (Vector a)
- def vtakeUntil (stopFn: a¶
vtakeUntil: take the longest prefix of a list where stopFn is False Once stopFn returns True, stopFn is not evaulated on further elements. This means that stopFn is applied to the List mostly sequentially. If more parallelism is desired, use ‘vmap f | vfind (_)’ and vtake.
vtakeUntil (_>=4) (vseq 8) = [0, 1, 2, 3] vtakeUntil (_>=0) (vseq 8) = [] vtakeUntil (_>=8) (vseq 8) = [0, 1, 2, 3, 4, 5, 6, 7]
Parameters:
stopFn: a, Boolean, Vector aReturn Type:
Vector a
- def vdropUntil (stopFn: a¶
dropUntil: discard elements from the list until ‘stopFn’ returns True Once stopFn returns True, stopFn is not evaulated on further elements. This means that stopFn is applied to the List mostly sequentially. If more parallelism is desired, use ‘vmap f | vfind (_)’ and vdrop.
vdropUntil (_>=4) (vseq 8) = [4, 5, 6, 7] vdropUntil (_>=0) (vseq 8) = [0, 1, 2, 3, 4, 5, 6, 7] vdropUntil (_>=8) (vseq 8) = []
Parameters:
stopFn: a, Boolean, Vector aReturn Type:
Vector a
- def vexists (acceptFn: a¶
vexists: does acceptFn return True for any element in the vector? Once acceptFn returns True, acceptFn is not evaulated on further elements. This means that acceptFn is applied to the Vector mostly sequentially. If more parallelism is desired, use ‘vmap f | vexists (_)’.
Parameters:
acceptFn: a, Boolean, Vector aReturn Type:
Boolean
- def vforall (acceptFn: a¶
vforall: does acceptFn return True for all element in the vector? Once acceptFn returns False, acceptFn is not evaulated on further elements. This means that acceptFn is applied to the Vector mostly sequentially. If more parallelism is desired, use ‘vmap f | vforall (_)’.
Parameters:
acceptFn: a, Boolean, Vector aReturn Type:
Boolean
- def vsplitBy (f: a¶
vsplitBy: partition a Vector into those elements with f True and False
def isEven x = x%2 == 0 vsplitBy isEven (vseq 6) = Pair [0, 2, 4] [1, 3, 5]
Parameters:
f: a, Boolean, v: Vector aReturn Type:
Pair (Vector a) (Vector a)
- def vfilter (f: a¶
vfilter: keep only those elements in the List where f evaluates to True
def isEven x = x%2 == 0 vfilter isEven (vseq 10) = [0, 2, 4, 6, 8]
Parameters:
f: a, Boolean, v: Vector aReturn Type:
Vector a
- def vunfoldl (generatingFn: accum¶
vunfoldl: create a Vector from a generator function. The generatingFn is called repeatedly
vunfoldl (x Pair (x+1) (str x)) 3 5 = [“3”, “4”, “5”, “6”, “7”]
Parameters:
generatingFn: a, Pair a b, a: a, n: IntegerReturn Type:
Vector b
- def vscanl (f: a¶
vscanl: create a new Vector from an accumulator run over the elements front-to-back. The last element of the produced Vector is equivalent to the result of vfoldl.
Examples: vscanl (_+_) 100 (vseq 6) = [100, 100, 101, 103, 106, 110, 115] ^^^- 100+0+1+2+3+4+5 ^^^- 100+0+1+2 ^^^- 100+0 ^^^- 100
Parameters:
f: a, b, a, a, Vector bReturn Type:
Vector a
- def vscanr (f: b¶
vscanr: create a new Vector from an accumulator run over the elements back-to-front. The first element of the produced List is equivalent to the result of a foldr.
Examples: vscanr (_+_) 100 (vseq 6) = 115, 115, 114, 112, 109, 105, 100, Nil ^^^- 100 ^^^- 5+100 ^^^- 1+2+3+4+5+100 ^^^- 0+1+2+3+4+5+100
Parameters:
f: a, b, b, b, Vector aReturn Type:
Vector b
- def vmapScan (mapFn: element¶
vmapScan: a parallel version of vscanl. Unlike vscanl, takes a map function, because combineFn operates on the same type. combineFn must be an associative operator; ie: f x (f y z) = f (f x y) z. The mapFn is called exactly once for each element of the input Vector. The combineFn may be called up to twice per input.
Parameters:
mapFn: a, b, combineFn: b, b, b, acc: b, v: Vector aReturn Type:
Vector b
- def vscan (f: a¶
No description for this feature yet.
Parameters:
f: a, a, a, acc: a, v: Vector aReturn Type:
Vector a
- def vsortBy (cmpFn: a¶
vsortBy: sort the input vector so that it is ascending wrt. lessThanFn Runtime when almost-sorted is O(n), otherwise O(nlogn) This is a stable sort; two equal values will retain their relative order.
vtab vseq 10 | vflatten | vsortBy (_<_) = [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 5 5 5 5 6 6 6 7 7 8]
Parameters:
cmpFn: a, a, Order, v: Vector aReturn Type:
Vector a
- def vdistinctBy (cmp: a¶
vdistinctBy: keep only the first occurrence of a value The order of non-duplicated elements is retained.
vdistinctBy (_<=>_) [1, 2, 1, 3, 4, 3] = [1, 2, 3, 4]
Parameters:
cmp: a, a, Order, v: Vector aReturn Type:
Vector a
- def vdistinctRunBy (eq: a¶
vdistinctRunBy: keep only the first occurrence in a run of equal values
vdistinctRunBy (_==_) [1, 1, 2, 1, 3, 3] = [1, 2, 1, 3]
Parameters:
eq: a, a, Boolean, v: Vector aReturn Type:
Vector a
- def vcmp (compareFn: a¶
vcmp: compare two Vectors using an Order comparator
vcmp (_<=>_) (vseq 5) (vseq 5) = EQ vcmp (_<=>_) (vseq 5) (vseq 4) = GT vcmp (_<=>_) [0] [1] = LT
Parameters:
compareFn: a, b, Order, Vector a, Vector bReturn Type:
Order
- def vmapPartial (f: a¶
vmapPartial: create a new Vector by applying a partial funciton to each element of a Vector. Partial functions can return None, in which case the result is not included in the output.
vmapPartial int [“3”, “x”, “44”] = [3, 44]
Parameters:
f: a, Option b, v: Vector aReturn Type:
Vector b
- def vmapPartial2 (f: a¶
vmapPartial2: create a new Vector by applying a partial function up to twice to each element of a Vector. If f is very fast, vmapPartial2 is more efficient as it avoids walking the vector twice.
vmapPartial2 int [“3”, “x”, “44”] = [3, 44]
Parameters:
f: a, Option b, v: Vector aReturn Type:
Vector b
result.wake¶
- def isPass: Result a b => Boolean¶
isPass: report if the Result was a Pass
isPass (Pass 123) = True isPass (Fail 123) = False
Parameters:
Result a bReturn Type:
Boolean
- def isFail: Result a b => Boolean¶
isFail: report if the Result was a Fail
isFail (Pass 123) = False isFail (Fail 123) = True
Parameters:
Result a bReturn Type:
Boolean
- def getPass: Result a b => Option a¶
getPass: retrieve the Pass value else None
getPass (Pass 123) = Some 123 getPass (Fail 123) = None
Parameters:
Result a bReturn Type:
Option a
- def getFail: Result a b => Option b¶
getFail: retrieve the Fail value else None
getFail (Pass 123) = None getFail (Fail 123) = Some 123
Parameters:
Result a bReturn Type:
Option b
- def getWhenFail (default: pass): Result pass fail => pass¶
getWhenFail: retrieve the Pass value, using a default value for Fail
getWhenFail 42 (Pass 123) = 123 getWhenFail 42 (Fail “fail”) = 42
Parameters:
default: a, Result a bReturn Type:
a
- def getWhenPass (default: fail): Result pass fail => fail¶
getWhenPass: retrieve the Fail value, using a default value for Pass
getWhenPass 42 (Pass “pass”) = 42 getWhenPass 42 (Fail 123) = 123
Parameters:
default: a, Result b aReturn Type:
a
- def rmap (fn: a => b): Result a fail => Result b fail¶
rmap: apply a function to a Pass-ing result If you find yourself using the function, consider using require instead.
rmap (_+1) (Pass 123) = Pass 124 rmap (_+1) (Fail 123) = Fail 123
Parameters:
fn: a, b, Result a cReturn Type:
Result b c
- def rmapError (fn: a¶
rmapError: apply a function to a Fail-ing result
rmapError (_+1) (Pass 123) = Pass 123 rmapError (_+1) (Fail 123) = Fail 124
Parameters:
fn: a, b, Result c aReturn Type:
Result c b
- def rmapPass (fn: a => Result b fail): Result a fail => Result b fail¶
rmapPass: apply a Fail-able function to a Pass-ing result If you find yourself using the function, consider using require instead.
Parameters:
fn: a, Result b c, Result a cReturn Type:
Result b c
- def rmapFail (fn: a => Result pass b): Result pass a => Result pass b¶
Applies a Fail-able function to Fail value or propogates Pass If you find yourself using the function, consider using require instead.
Parameters:
fn: a, Result b c, Result b aReturn Type:
Result b c
- def rfoldl (combiningFn: accumulator¶
Try to combine the elements of a List front-to-back, where each step might fail. If any update step fails, the error value of the first such failure is returned and no further values are processed.
Parameters: - combiningFn: How to attempt to meld each element into the accumulator. - acc: The initial value of the accumulator; if list is empty, this is returned unchanged as the Pass value. - list: The elements which should be combined.
Parameters:
combiningFn: a, b, Result a c, acc: a, list: List bReturn Type:
Result a c
- def rfoldr (combiningFn: element¶
Try to combine the elements of a List front-to-back, where each step might fail. If any update step fails, the error value of the first such failure is returned and no further values are processed.
Parameters: - combiningFn: How to attempt to meld each element into the accumulator. - acc: The initial value of the accumulator; if list is empty, this is returned unchanged as the Pass value. - list: The elements which should be combined.
Parameters:
combiningFn: a, b, Result b c, acc: b, list: List aReturn Type:
Result b c
- def findFailFn (fn: a¶
findFailFn: if fn returns Pass for all List elements, return the outputs else Fail Once a Fail is found, fn is not evaluated on further elements. This means that fn is applied to the List mostly sequentially. If more parallelism is desired, use ‘map fn | findFail’ instead.
def toInt x = int x | getOrFail “not an Integer ({x})” findFailFn toInt (“456”, “123”, Nil) = Pass (456, 123, Nil) findFailFn toInt (“_56”, “123”, Nil) = Fail “not an Integer (_56)”
Parameters:
fn: a, Result b c, List aReturn Type:
Result (List b) c
- def findPassFn (fn: a¶
findPassFn: if fn returns Fail for all List elements, return the outputs else Pass Once a Pass is found, fn is not evaluated on further elements. This means that fn is applied to the List mostly sequentially. If more parallelism is desired, use ‘map fn | findPass’ instead.
def toInt x = int x | getOrFail “bad: {x}” findPassFn toInt (“_56”, “123”, “777”, Nil) = Pass 123 findPassFn toInt (“_56”, “_23”, “_77”, Nil) = Fail (“bad: _56”, “bad: _23”, “bad: _77”, Nil)
Parameters:
fn: a, Result b c, List aReturn Type:
Result b (List c)
- def stack Unit: List String¶
stack: dump a stack trace from the call site This function currently only works with debug mode enabled.
Parameters:
UnitReturn Type:
List String
- tuple Error¶
An Error has a cause and a stack trace Result types should generally use an Error for their Fail case.
Parameters:
Cause: String, Stack: List StringReturn Type:
Error
- def makeError (cause: String): Error¶
makeError: create an Error with the specified cause This captures the stack at the point of the makeError call.
Parameters:
cause: StringReturn Type:
Error
- def addErrorContext (prefix: String): Result a Error => Result a Error¶
addErrorContext: add a prefix to the cause string of a Fail-ure This method can be useful to preserve an existing failure cause, where using a require-else must supply a totally new cause.
require Pass contents = read file | addErrorContext “opening {file.getPathName}”
Parameters:
prefix: String, Result a ErrorReturn Type:
Result a Error
- def failWithError (cause: String): Result a Error¶
failWithError: produce a Fail for us in error conditions
require Some = int str else failWithError “Could not parse {str} as an Integer”
Parameters:
cause: StringReturn Type:
Result a Error
- def (argument: Result a b) |> (pipeFn: a¶
|>: Result compatible pipeline function. Used in the same way as '|’ when both the input and the following function return a Result.
Example:
` Pass "foo.json" |> source |> parseJSONFile `Parameters:
argument: Result a b, pipeFn: a, Result c bReturn Type:
Result c b
tree.wake¶
- def tnew cmp¶
Create a new Tree, sorted by cmp.
Parameters:
cmp: a, a, OrderReturn Type:
Tree a
- def listToTree cmp list¶
Convert a List to a Tree.
Parameters:
cmp: a, a, Order, list: List aReturn Type:
Tree a
- def listToTreeMulti cmp list¶
No description for this feature yet.
Parameters:
cmp: a, a, Order, list: List aReturn Type:
Tree a
- def vectorToTreeMulti cmp v¶
No description for this feature yet.
Parameters:
cmp: a, a, Order, v: Vector aReturn Type:
Tree a
- def vectorToTree cmp v¶
Convert a Vector to a Tree.
Parameters:
cmp: a, a, Order, v: Vector aReturn Type:
Tree a
- def tlen (Tree _ root: Tree a): Integer¶
Returns the total length of the Tree.
Parameters:
Tree aReturn Type:
Integer
- def tempty (Tree _ root: Tree a): Boolean¶
Returns True if the Tree is empty, False otherwise.
Parameters:
Tree aReturn Type:
Boolean
- def tinsert (y: a) (Tree cmp root: Tree a): Tree a¶
Insert y into the tree only if no other keys == y
Parameters:
a, Tree aReturn Type:
Tree a
- def tinsertReplace (y: a) (tree: Tree a): Tree a¶
Insert y into the tree, removing any existing keys == y
Parameters:
y: a, tree: Tree aReturn Type:
Tree a
- def tinsertMulti (y: a) (Tree cmp root: Tree a): Tree a¶
Insert y into the tree at the lowest rank of keys = y
Parameters:
a, Tree aReturn Type:
Tree a
- def tinsertWith (fn: (incoming: a)¶
Insert y into the tree, or the value resulting from fn on a collision y is passed as the left-hand value of fn.
Parameters:
fn: incoming: a, existing: a, a, y: a, tree: Tree aReturn Type:
Tree a
- def (a: Tree x) ⊆ (b: Tree x): Boolean¶
Test if a is a subset of b (every element of a is also in b). Note that the comparison function of b is used to determine element equality, if the two differ. See tsubset for a prefix form of the function.
Parameters:
a: Tree a, b: Tree aReturn Type:
Boolean
- def (a: Tree x) ⊇ (b: Tree x): Boolean¶
Test if a is a superset of b (a contains every element of b). Note that the comparison function of b is used to determine element equality, if the two differ.
Parameters:
a: Tree a, b: Tree aReturn Type:
Boolean
- def (a: Tree x) ⊉ (b: Tree x): Boolean¶
Test if a is not a superset of b (a is missing some element of b). Note that the comparison function of b is used to determine element equality, if the two differ.
Parameters:
a: Tree a, b: Tree aReturn Type:
Boolean
- def (a: Tree x) ⊈ (b: Tree x): Boolean¶
Test if a is not a subset of b (some element of a does not exist in b). Note that the comparison function of b is used to determine element equality, if the two differ.
Parameters:
a: Tree a, b: Tree aReturn Type:
Boolean
- def (a: Tree x) ⊊ (b: Tree x): Boolean¶
Test if a is a proper subset of b. (Not only is every element of a is also in b, but the two sets aren’t equal.) Note that the comparison function of b is used to determine element equality, if the two differ.
Parameters:
a: Tree a, b: Tree aReturn Type:
Boolean
- def (a: Tree x) ⊋ (b: Tree x): Boolean¶
Test if a is a proper superset of b. (Not only does a contain every element b, but the two sets aren’t equal.) Note that the comparison function of b is used to determine element equality, if the two differ.
Parameters:
a: Tree a, b: Tree aReturn Type:
Boolean
- def tsubset (a: Tree x) (b: Tree x): Boolean¶
Test if a is a subset of b (every element of a is also in b). Note that the comparison function of b is used to determine element equality, if the two differ.
Parameters:
a: Tree a, b: Tree aReturn Type:
Boolean
- def tdelete (y: a) (Tree cmp root: Tree a): Tree a¶
Deletes all keys that are equal to y.
Parameters:
a, Tree aReturn Type:
Tree a
- def tfoldl f a (Tree _ root)¶
Folds from left to right.
Parameters:
a, b, a, a, Tree bReturn Type:
a
- def tfoldr f a (Tree _ root)¶
Folds from right to left.
Parameters:
a, b, b, b, Tree aReturn Type:
b
- def tfoldmap (combineFn: b¶
Transform and collapse all values in a Tree in parallel.
Parameters: * combineFn: A function which can combine multiple output values into one. This function should be parallel. * base: A “seed” value with which to start the fold. This will be applied as the farthest-left value, before any values derived from tree itself. * transformFn: A function performing some work to be applied to every element in tree in parallel. * tree: The values from which the result should be derived.
Parameters:
combineFn: a, a, a, base: a, transformFn: b, a, tree: Tree bReturn Type:
a
- def tfold f a t¶
No description for this feature yet.
Parameters:
f: a, a, a, a: a, t: Tree aReturn Type:
a
- def tappi f (Tree _ root)¶
No description for this feature yet.
Parameters:
Integer, a, b, Tree aReturn Type:
Unit
- def tat (i: Integer) (Tree _ root: Tree a): Option a¶
Extract the i-th ranked element
Parameters:
Integer, Tree aReturn Type:
Option a
- def tsplitAt (i: Integer) (Tree cmp root: Tree a): Pair (Tree a) (Tree a)¶
Split elements ranked [0,i) and [i,inf) into two trees
Parameters:
Integer, Tree aReturn Type:
Pair (Tree a) (Tree a)
- def ttake i t¶
No description for this feature yet.
Parameters:
i: Integer, t: Tree aReturn Type:
Tree a
- def tdrop i t¶
No description for this feature yet.
Parameters:
i: Integer, t: Tree aReturn Type:
Tree a
- def tfind f (Tree _ root)¶
Lowest rank element where f x = True => Option (Pair x rank)
Parameters:
a, Boolean, Tree aReturn Type:
Option (Pair a Integer)
- def tsplitUntil f t¶
No description for this feature yet.
Parameters:
f: a, Boolean, t: Tree aReturn Type:
Pair (Tree a) (Tree a)
- def ttakeUntil f t¶
No description for this feature yet.
Parameters:
f: a, Boolean, t: Tree aReturn Type:
Tree a
- def tdropUntil f t¶
No description for this feature yet.
Parameters:
f: a, Boolean, t: Tree aReturn Type:
Tree a
- def texists f t¶
Returns True if there exists an x in t where f x = True
Parameters:
f: a, Boolean, t: Tree aReturn Type:
Boolean
- def tforall f t¶
No description for this feature yet.
Parameters:
f: a, Boolean, t: Tree aReturn Type:
Boolean
- def tsplit y (Tree cmp root)¶
Split tree into those elements <, =, and > y
Parameters:
a, Tree aReturn Type:
Triple (Tree a) (Tree a) (Tree a)
- def tsplitBy (f: a¶
Split tree into those elements where f x = True and those where f x = False
Parameters:
a, Boolean, Tree aReturn Type:
Pair (Tree a) (Tree a)
- def tfilter (f: a¶
Remove all elements x such that f x = False.
Parameters:
a, Boolean, Tree aReturn Type:
Tree a
- def tmin (Tree _ root: Tree a): Option a¶
Return the smallest element in the tree.
Parameters:
Tree aReturn Type:
Option a
- def tmax (Tree _ root: Tree a): Option a¶
Return the largest element in the tree.
Parameters:
Tree aReturn Type:
Option a
- def tlowerGE (y: a) (Tree cmp root: Tree a): Option (Pair a Integer)¶
Lowest rank element with x >= y, along with that rank.
Parameters:
a, Tree aReturn Type:
Option (Pair a Integer)
- def tlowerGT (y: a) (Tree cmp root: Tree a): Option (Pair a Integer)¶
Lowest rank element with x > y, along with that rank.
Parameters:
a, Tree aReturn Type:
Option (Pair a Integer)
- def tupperLT (y: a) (Tree cmp root: Tree a): Option (Pair a Integer)¶
Highest rank element with x < y, along with that rank.
Parameters:
a, Tree aReturn Type:
Option (Pair a Integer)
- def tupperLE (y: a) (Tree cmp root: Tree a): Option (Pair a Integer)¶
Highest rank element with x <= y, along with that rank.
Parameters:
a, Tree aReturn Type:
Option (Pair a Integer)
- def tequal y (Tree cmp root)¶
Extract all elements from the tree which are equal to y => Pair (matches: List x) (rank: Integer)
Parameters:
a, Tree aReturn Type:
Pair (List a) Integer
- def x ∈ y¶
Returns True if x is an element of y, False otherwise.
Parameters:
x: a, y: Tree aReturn Type:
Boolean
- def x ∉ y¶
Returns True if x is NOT an element of y, False otherwise.
Parameters:
x: a, y: Tree aReturn Type:
Boolean
- def x ∋ y¶
Returns True if x contains y, False otherwise.
Parameters:
x: Tree a, y: aReturn Type:
Boolean
- def x ∌ y¶
Returns True if x does NOT contain y, False otherwise.
Parameters:
x: Tree a, y: aReturn Type:
Boolean
- def tcontains (y: a) (t: Tree a): Boolean¶
No description for this feature yet.
Parameters:
y: a, t: Tree aReturn Type:
Boolean
- def tdistinctBy (cmp: a => a => Order) (t: Tree a): Tree a¶
Eliminate duplicates, as identified by cmp
Parameters:
cmp: a, a, Order, t: Tree aReturn Type:
Tree a
- def tdistinctRunBy (f: a => a => Boolean) (t: Tree a): Tree a¶
Eliminate duplicates, as identified by f
Parameters:
f: a, a, Boolean, t: Tree aReturn Type:
Tree a
- def a ∪ b¶
Returns the union of trees a and b, keeps only values from a if they are equal to values in b.
Parameters:
a: Tree a, b: Tree aReturn Type:
Tree a
- def tunion (Tree _ aroot: Tree a) (Tree cmp broot: Tree a): Tree a¶
Returns the union of two trees, given their roots.
Parameters:
Tree a, Tree aReturn Type:
Tree a
- def tunionWith (fn: a¶
No description for this feature yet.
Parameters:
fn: a, a, a, left: Tree a, right: Tree aReturn Type:
Tree a
- def a ⊎ b¶
Union of two trees, keeping equal values of a before equal values of b
Parameters:
a: Tree a, b: Tree aReturn Type:
Tree a
- def tunionMulti (Tree _ aroot) (Tree cmp broot)¶
No description for this feature yet.
Parameters:
Tree a, Tree aReturn Type:
Tree a
- def tsubtract (Tree _ aroot: Tree a) (Tree cmp broot: Tree a): Tree a¶
Returns the set difference of A and B, that is, a tree containing all elements of A which are not in B.
Parameters:
Tree a, Tree aReturn Type:
Tree a
- def a ∩ b¶
Returns a tree containing all elements of A which are also in B.
Parameters:
a: Tree a, b: Tree aReturn Type:
Tree a
- def tintersect (Tree _ aroot) (Tree cmp broot)¶
No description for this feature yet.
Parameters:
Tree a, Tree aReturn Type:
Tree a
- def tintersectWith (fn: a¶
No description for this feature yet.
Parameters:
fn: a, a, a, left: Tree a, right: Tree aReturn Type:
Tree a
order.wake¶
- def isLT: Order => Boolean¶
Is less-than: convert Order to Boolean def a < b = a <=> b | isLT isLT LT = True isLT EQ = False isLT GT = False
Parameters:
OrderReturn Type:
Boolean
- def isEQ: Order => Boolean¶
Is equal: convert Order Boolean def a == b = a <=> b | isEQ isEQ LT = False isEQ EQ = True isEQ GT = False
Parameters:
OrderReturn Type:
Boolean
- def isGT: Order => Boolean¶
Is greater-than: convert Order to Boolean def a > b = a <=> b | isGT isGT LT = False isGT EQ = False isGT GT = True
Parameters:
OrderReturn Type:
Boolean
- def isLE: Order => Boolean¶
Is less-than-or-equal: convert Order to Boolean def a <= b = a <=> b | isLE isLE LT = True isLE EQ = True isLE GT = False
Parameters:
OrderReturn Type:
Boolean
- def isNE: Order => Boolean¶
Is not-equal: convert Order to Boolean def a != b = a <=> b | isNE isEQ LT = True isEQ EQ = False isEQ GT = True
Parameters:
OrderReturn Type:
Boolean
- def isGE: Order => Boolean¶
Is greater-than-or-equal: convert Order to Boolean def a >= b = a <=> b | isGE isGE LT = False isGE EQ = True isGE GT = True
Parameters:
OrderReturn Type:
Boolean
double.wake¶
- def dabs (x: Double): Double¶
Unary absolute value operator for a Double. dabs (+. 2.5) = 2.5 dabs (-. 2.5) = 2.5
Parameters:
x: DoubleReturn Type:
Double
- def -.(x: Double): Double¶
Unary negative sign for a Double. -. (-. 2.5) = 2.5 -. (+. 2.5) = -2.5
Parameters:
x: DoubleReturn Type:
Double
- def +.(x: Double): Double¶
Unary positive sign for a Double. +. 2.5 = 2.5
Parameters:
x: DoubleReturn Type:
Double
- def (x: Double) +. (y: Double): Double¶
Binary addition operator for Double values. 1.1 +. 2.0 = 3.1 0.1 +. 0.5 = 0.6
Parameters:
x: Double, y: DoubleReturn Type:
Double
- def (x: Double) -. (y: Double): Double¶
Binary subtraction operator for Double values. 4.0 -. 2.2 = 1.8 1.1 -. 2.0 = -. 0.9
Parameters:
x: Double, y: DoubleReturn Type:
Double
- def (x: Double) *. (y: Double): Double¶
Binary multiplication operator for Double values. 2.0 *. 3.3 = 6.6 2.0 *. 4.1 = 8.2
Parameters:
x: Double, y: DoubleReturn Type:
Double
- def (x: Double) /. (y: Double): Double¶
Binary division operator for Double valuess. 4.0 /. 2.0 = 2.0 5.0 /. 2.0 = 2.5
Parameters:
x: Double, y: DoubleReturn Type:
Double
- def (x: Double) ^. (y: Double): Double¶
Binary exponentiation operator for Double values. 2.0 ^. 3.0 = 8.0 0.5 ^. 2.0 = 0.25
Parameters:
x: Double, y: DoubleReturn Type:
Double
- def dfma (x: Double) (y: Double) (z: Double): Double¶
Computes x*y + z with rounding only at the end. The fused-multiply-add operation is useful in numeric algorithms. It is necessary in order compute values with full precision. dfma 2.0 3.0 1.0 = 7.0 dfma 1.0 1.0 1.0 = 3.0
Parameters:
x: Double, y: Double, z: DoubleReturn Type:
Double
- def droot (n: Double): Double¶
Computes the n-th root. droot 2.0 9.0 = 3.0 droot 3.0 27.0 = 3.0 droot 3.0 (-. 27.0) = nan
Parameters:
n: Double, DoubleReturn Type:
Double
- def √(x: Double): Double¶
Unary operator for square root, using the unicode character.
Parameters:
x: DoubleReturn Type:
Double
- def ∛(x: Double): Double¶
Unary operator for cube root.
Parameters:
x: DoubleReturn Type:
Double
- def ∜(x: Double): Double¶
Unary operator for fourth root.
Parameters:
x: DoubleReturn Type:
Double
- def dcmp (x: Double) (y: Double): Option Order¶
Compare two Double values. NaN values cannot be compared, so return None nan <=>. 4.5 = None 4.5 <=>. nan = None nan <=>. nan = None 4.5 <=>. 4.5 = Some EQ 4.5 <=>. 5.0 = Some LT 4.0 <=>. 4.5 = Some GT
Parameters:
x: Double, y: DoubleReturn Type:
Option Order
- def (x: Double) <=>. (y: Double): Option Order¶
Comparison of two Doubles. NaN values cannot be compared, so return None nan <=>. 4.5 = None 4.5 <=>. nan = None nan <=>. nan = None 4.5 <=>. 4.5 = Some EQ 4.5 <=>. 5.0 = Some LT 4.0 <=>. 4.5 = Some GT
Parameters:
x: Double, y: DoubleReturn Type:
Option Order
- def (x: Double) <. (y: Double): Boolean¶
Binary Less-Than Operator. IEEE 754 requires comparison with NaN to return False nan <. nan = False nan <. 1.0 = False 1.0 <. nan = False 1.0 <. 1.0 = False 1.0 <. 0.0 = False 1.0 <. 2.0 = True
Parameters:
x: Double, y: DoubleReturn Type:
Boolean
- def (x: Double) >. (y: Double): Boolean¶
Binary Greater-Than Operator. IEEE 754 requires comparison with NaN to return False nan >. nan = False nan >. 1.0 = False 1.0 >. nan = False 1.0 >. 1.0 = False 1.0 >. 0.0 = True 1.0 >. 2.0 = False
Parameters:
x: Double, y: DoubleReturn Type:
Boolean
- def (x: Double) >=. (y: Double): Boolean¶
Binary Greater-Or-Equal Operator. IEEE 754 requires comparison with NaN to return False nan >=. nan = False nan >=. 1.0 = False 1.0 >=. nan = False 1.0 >=. 1.0 = True 1.0 >=. 0.0 = True 1.0 >=. 2.0 = False
Parameters:
x: Double, y: DoubleReturn Type:
Boolean
- def (x: Double) <=. (y: Double): Boolean¶
Binary Less-Or-Equal Operator. IEEE 754 requires comparison with NaN to return False nan <=. nan = False nan <=. 1.0 = False 1.0 <=. nan = False 1.0 <=. 1.0 = True 1.0 <=. 0.0 = False 1.0 <=. 2.0 = True
Parameters:
x: Double, y: DoubleReturn Type:
Boolean
- def (x: Double)¶
Binary Equal-To Operator. IEEE 754 requires comparison with NaN to return False nan ==. nan = False nan ==. 1.0 = False 1.0 ==. nan = False 1.0 ==. 1.0 = True 1.0 ==. 0.0 = False 1.0 ==. 2.0 = False
Parameters:
x: Double, y: DoubleReturn Type:
Boolean
- def (x: Double) !=. (y: Double): Boolean¶
Binary Not-Equal Operator. IEEE 754 requires comparison with NaN to return True nan !=. nan = True nan !=. 1.0 = True 1.0 !=. nan = True 1.0 !=. 1.0 = False 1.0 !=. 0.0 = True 1.0 !=. 2.0 = True
Parameters:
x: Double, y: DoubleReturn Type:
Boolean
- def dmin (x: Double) (y: Double): Double¶
Computes the minimum of two Double values. If either is nan, the result is nan. dmin nan nan = nan dmin nan 1.0 = nan dmin 1.0 nan = nan dmin 1.0 3.0 = 1.0 dmin 3.0 1.0 = 1.0
Parameters:
x: Double, y: DoubleReturn Type:
Double
- def dmax (x: Double) (y: Double): Double¶
Computes the maximum of two Doubles. If either is nan, the result is nan dmax nan nan = nan dmax nan 1.0 = nan dmax 1.0 nan = nan dmax 1.0 3.0 = 3.0 dmax 3.0 1.0 = 3.0
Parameters:
x: Double, y: DoubleReturn Type:
Double
- def ∏.(l: List Double): Double¶
No description for this feature yet.
Parameters:
l: List DoubleReturn Type:
Double
- def ∑.(l: List Double): Double¶
No description for this feature yet.
Parameters:
l: List DoubleReturn Type:
Double
- def dformat (format: DoubleFormat): (digits: Integer)¶
Format a Double as a String; for digits=3: DoubleFixed 1000.000 1.000 # exactly 3 digits after the decimal DoubleScientific 1.000e+03 1.000e+00 # exactly 3 digits after the decimal DoubleHex 0x1.f40p+9 0x1.000p+0 # exactly 3 digits after the decimal DoubleDefault 1e+03 1e0 # at 3 digits of precision
Parameters:
format: DoubleFormat, p: Integer, x: DoubleReturn Type:
String
- def double (doubleInString: String): Option Double¶
Convert a String into a Double Can parse any Double formatted by dformat. If the value could not be processed; returns None double “1.0” = Some 1e0 double “xyz” = None
Parameters:
doubleInString: StringReturn Type:
Option Double
- def dint (x: Integer): Double¶
Convert an Integer into a Double dint 55 = 55e0 dint (1 << 2000) = inf
Parameters:
x: IntegerReturn Type:
Double
- def dclass (x: Double): DoubleClass¶
Categorize a Double based on the type of number dclass inf = DoubleInfinite dclass nan = DoubleNaN dclass 1.0 = DoubleNormal dclass 1.0e-322 = DoubleSubNormal
Parameters:
x: DoubleReturn Type:
DoubleClass
- def dfrexp (x: Double): Pair Double Integer¶
Split ‘x’ into (Pair sig exp), such that: x = sig * 2^exp 0.5 <= sig < 1.0
dfrexp 1.0 = Pair 0.5 1 dfrexp 2.0 = Pair 0.5 2 dfrexp 4.0 = Pair 0.5 3 dfrexp 3.0 = Pair 0.75 2
Parameters:
x: DoubleReturn Type:
Pair Double Integer
- def dldexp (fraction: Double) (exponent: Integer): Double¶
Reverse the effects of dfrexp
dldexp 0.5 1 = 1.0 dldexp 0.5 2 = 2.0 dldexp 0.5 3 = 4.0 dldexp 0.75 2 = 3.0
Parameters:
fraction: Double, exponent: IntegerReturn Type:
Double
- def dmodf (x: Double): Pair Integer Double¶
Split ‘x’ into (Pair int fraction), such that: x = int + fraction -1 < fraction < 1 sign(fraction) = sign(x)
dmodf 5.0 = Pair 5 0.0 dmodf 5.1 = Pair 5 0.1 dmodf (-.5.1) = Pair -5 -0.1
Parameters:
x: DoubleReturn Type:
Pair Integer Double
- def dcos (radians: Double): Double¶
Calculates the cosine of a Double. dcos nan = nan dcos 0.0 = 1.0 dcos (pi/.2.0) = 0.0 dcos pi = -.1.0
Parameters:
radians: DoubleReturn Type:
Double
- def dsin (radians: Double): Double¶
Calculates the sine of a Double. dsin nan = nan dsin 0.0 = 0.0 dsin (pi/.2.0) = 1.0 dins pi = 0.0
Parameters:
radians: DoubleReturn Type:
Double
- def dtan (radians: Double): Double¶
Calculates the tangent of a Double. dtan (-.pi/.2.0) = -inf dtan 0.0 = 0.0 dtan ( pi/.2.0) = +inf
Parameters:
radians: DoubleReturn Type:
Double
- def dacos (x: Double): Double¶
Calculates the inverse cosine of a Double. dacos (-.1.0) = pi dacos 0.0 = pi /. 2.0 dacos 1.0 = 0.0 dacos 2.0 = nan
Parameters:
x: DoubleReturn Type:
Double
- def dasin (x: Double): Double¶
Calculates the inverse sine of a Double. dasin (-.1.0) = -.(pi/2.0) dasin 0.0 = 0.0 dasin 1.0 = pi/2.0
Parameters:
x: DoubleReturn Type:
Double
- def datan (x: Double) (y: Double): Double¶
Calculates the inverse tangent of y/x, giving the angle of the point(x, y) in the coordinate plane. The advantage of 2-argument datan over 1-argument datan is it is defined even where x is 0. datan (-. 1.0) (-. 1.0) = pi * -0.75 datan (-. 1.0) 0.0 = pi * -0.50 datan (-. 1.0) 1.0 = pi * -0.25 datan 0.0 1.0 = pi * 0.00 datan 1.0 1.0 = pi * 0.25 datan 1.0 0.0 = pi * 0.50 datan 1.0 (-. 1.0) = pi * 0.75 datan 0.0 (-. 1.0) = pi * 1.00
Parameters:
x: Double, y: DoubleReturn Type:
Double
- def dexp (x: Double): Double¶
Calculates e^x. dexp 0.0 = 1.0 dexp 1.0 = 2.71828 dexp (-.inf) = 0.0
Parameters:
x: DoubleReturn Type:
Double
- def dlog (x: Double): Double¶
Calculates the natural logarithm of x. dlog (dexp x) = x dlog (-. 1.0) = nan
Parameters:
x: DoubleReturn Type:
Double
- def dexpm1 (x: Double): Double¶
Calculates e^.x -. 1.0 Useful for values of ‘x’ close to 0.0 dexpm1 (-.0.2) = -.0.18 dexpm1 0.0 = 0.0 dexpm1 0.2 = 0.22
Parameters:
x: DoubleReturn Type:
Double
- def dlog1p (x: Double): Double¶
Calculates dlog (1.0 +. x) dlog1p (dexpm1 x) = x Useful for values of ‘x’ close to 0.0 dlog1p (-.0.2) = -.0.22 dlog1p 0.0 = 0.0 dlog1p 0.2 = 0.18
Parameters:
x: DoubleReturn Type:
Double
- def derf (x: Double): Double¶
Calculate the ‘error function’. 2/sqrt(pi) Integral_{0..x} e^(-t^2) dt This function is handy for statistics
Parameters:
x: DoubleReturn Type:
Double
- def derfc (x: Double): Double¶
Calculate the complementary ‘error function’ (1-erf). 2/sqrt(pi) Integral_{0..x} e^(-t^2) dt This function is handy for statistics
Parameters:
x: DoubleReturn Type:
Double
- def dtgamma (x: Double): Double¶
Compute the gamma function; Integral_{0..inf} t^{x-1} e^t dt This is an everywhere-defined factorial method; dtgamma (x+1) = x!
Parameters:
x: DoubleReturn Type:
Double
- def dlgamma (x: Double): Double¶
Compute the logarithm of the gamma function This is useful to approximate statistics like (n choose m)
Parameters:
x: DoubleReturn Type:
Double
map.wake¶
- def mnew (cmpKey: k¶
Initialize an empty Map which will use the given total order function.
Parameters: * cmpKey: A function providing a total ordering over values of the key type.
Example:
` mnew scmp | msize = 0 `Parameters:
cmpKey: a, a, OrderReturn Type:
Map a b
- def listToMap (cmpKey: k¶
Construct a Map from the pre-associated key-value pairs in the List. If multiple Pair`s have the same left value (key), then the resulting `Map will contain the right value of only the first occurrence.
Parameters: * cmpKey: A function providing a total ordering over values of the key type. * pairs: The keys and values which the Map should contain. This does not have to be sorted, but each left-hand value should be unique.
Examples:
` listToMap scmp ("a" → True, "b" → False, "c" → False, Nil) | msize = 3 listToMap scmp ("a" → 1, "a" → 2, Nil) | mlookup "a" = Some 1 `Parameters:
cmpKey: a, a, Order, pairs: List Pair a bReturn Type:
Map a b
- def vectorToMap (cmpKey: k¶
Construct a Map from the pre-associated key-value pairs in the Vector. If multiple Pair`s have the same left value (key), then the resulting `Map will contain the right value of only the first occurrence.
Parameters: * cmpKey: A function providing a total ordering over values of the key type. * pairs: The keys and values which the Map should contain. This does not have to be sorted, but each left-hand value should be unique.
Parameters:
cmpKey: a, a, Order, pairs: Vector Pair a bReturn Type:
Map a b
- def msize (map: Map k v): Integer¶
Count how many key-value associations are contained in the Map.
Examples:
` mnew scmp | msize = 0 listToMap scmp ("a" → True, "b" → False, "c" → False, Nil) | msize = 3 `Parameters:
map: Map a bReturn Type:
Integer
- def mempty (map: Map k v): Boolean¶
Test if the Map does not contain any elements.
Examples:
` mnew scmp | mempty = True listToMap scmp ("a" → True, "b" → False, "c" → False, Nil) | mempty = False `Parameters:
map: Map a bReturn Type:
Boolean
- def minsert (key: k) (value: v) (map: Map k v): Map k v¶
Add a given value into the map under the key, if that key does not already exist. Any pair with the same key which already exists in the map remains unchanged.
For a similar function which uses the new value provided, see minsertReplace or minsertWith.
Examples:
` mnew scmp | minsert "a" 2 | mlookup "a" = Some 2 listToMap scmp ("a" → 1, Nil) | minsert "a" 2 | mlookup "a" = Some 1 `Parameters:
key: a, value: b, map: Map a bReturn Type:
Map a b
- def minsertReplace (key: k) (value: v) (map: Map k v): Map k v¶
Add a given value into the map under the key, whether or not it already exists.
For a similar function which preserves the original value contained in the map, see minsert or minsertWith.
Examples:
` mnew scmp | minsertReplace "a" 2 | mlookup "a" = Some 2 listToMap scmp ("a" → 1, Nil) | minsertReplace "a" 2 | mlookup "a" = Some 2 `Parameters:
key: a, value: b, map: Map a bReturn Type:
Map a b
- def minsertWith (fn: k¶
Add a given value into the map under the key, resolving conflicts as specified.
If just replacing or keeping the original, consider using minsert or minsertReplace instead. Prefer minsertWith when accumulating values over multiple inserts.
Examples:
` mnew scmp | minsertWith (\_k (_+_)) "a" 2 | mlookup "a" = Some 2 listToMap scmp ("a" → 1, Nil) | minsertWith (\_k (_+_)) "a" 2 | mlookup "a" = Some 3 `Parameters:
fn: a, incoming: b, existing: b, b, key: a, value: b, map: Map a bReturn Type:
Map a b
- def mdelete (key: k) (map: Map k v): Map k v¶
Remove any value contained in the map under the given key.
Examples:
` listToMap scmp ("a" → 1, "b" → 2, Nil) | mdelete "b" | mlookup "b" = None listToMap scmp ("a" → 1, "b" → 2, Nil) | mdelete "x" | msize = 2 `Parameters:
key: a, map: Map a bReturn Type:
Map a b
- def mfoldl (fn: k¶
Accumulate and combine every value in the map, starting from the “smallest” key.
Parameters: * fn: The manner in which each value should be added to the accumulator. * base: The value used to initialize the accumulator. If map is empty, this value is returned unchanged. * map: The key-value pairs which will be combined.
Examples:
` mnew scmp | mfoldl (\_\a\v a + v) 0 = 0 listToMap scmp ("a" → 1, "b" → 2, Nil) | mfoldl (\_\a\v a + v) 0 = 3 listToMap scmp ("a" → 1, "b" → 2, Nil) | mfoldl (\k\a\v "{a} {k}={str v}") "k=v:" = "k=v: a=1 b=2" `Parameters:
fn: a, b, c, b, base: b, map: Map a cReturn Type:
b
- def mfoldr (fn: k¶
Accumulate and combine every value in the map, starting from the “largest” key.
Parameters: * fn: The manner in which each value should be added to the accumulator. * base: The value used to initialize the accumulator. If map is empty, this value is returned unchanged. * map: The key-value pairs which will be combined.
Examples:
` mnew scmp | mfoldr (\_\v\a v + a) 0 = 0 listToMap scmp ("a" → 1, "b" → 2, Nil) | mfoldr (\_\v\a v + a) 0 = 3 listToMap scmp ("a" → 1, "b" → 2, Nil) | mfoldr (\k\v\a "{a} {k}={str v}") "k=v:" = "k=v: b=2 a=1" `Parameters:
fn: a, b, c, c, base: c, map: Map a bReturn Type:
c
- def mfoldmap (combineFn: a¶
Transform and combine every value in the map in parallel.
Parameters: * combineFn: The manner in which two values of the target type should be joined. * base: The value used to initialize the accumulator. If map is empty, this value is returned unchanged. * transformFn: The function which should be applied to every key-value pair in the map. This might just be to prepare them to be combined, or it might be some more complex function which happens to have a more-easily-joined output. * map: The key-value pairs which will be processed.
Examples:
` mnew scmp | mfoldmap (_+_) 0 (\_\v v) = 0 listToMap scmp ("a" → 1, "b" → 2, Nil) | mfoldmap (_+_) 0 (\_\v v) = 3 listToMap scmp ("a" → 1, "b" → 2, Nil) | mfoldmap ("{_} {_}") "k=v:" ("{_}={str _}") = "k=v: a=1 b=2" `Parameters:
combineFn: a, a, a, base: a, transformFn: b, c, a, map: Map b cReturn Type:
a
- def mapToList (map: Map k v): List (Pair k v)¶
Flatten every key-value pair in the map into a simple list.
Examples:
` mnew scmp | mapToList = Nil listToMap scmp ("a" → 1, Nil) | minsert "b" 2 | mapToList = Pair "a" 1, Pair "b" 2, Nil `Parameters:
map: Map a bReturn Type:
List (Pair a b)
- def mmap (fn: k¶
Apply some function to every value contained in the map.
Examples:
` listToMap scmp ("a" → 1, "b" → 2, Nil) | mmap (\_\v v + 1) | mlookup "b" = 3 listToMap scmp ("a" → 1, "b" → 2, Nil) | mmap (\k\v "{k}={str v}") | mlookup "b" = "b=2" `Parameters:
fn: a, b, c, map: Map a bReturn Type:
Map a c
- def mmapPass (fn: k¶
Apply some failable function to every value, passing only if every computation does.
Example:
` listToMap scmp ("a" → "1", "b" → "2", Nil) | mmapPass (int _ | getOrFail "") = Pass ... `Parameters:
fn: a, b, Result c d, map: Map a bReturn Type:
Result (Map a c) d
- def mmin (map: Map k v): Option (Pair k v)¶
Retrieve the “smallest” key from the map and its associated value. This is determined according to the comparison function specified when the map was originally created.
Examples:
` mnew scmp | mmin = None listToMap scmp ("a" → 1, "b" → 2, Nil) | mmin = Some (Pair "a" 1) `Parameters:
map: Map a bReturn Type:
Option (Pair a b)
- def mmax (map: Map k v): Option (Pair k v)¶
Retrieve the “largest” key from the map and its associated value. This is determined according to the comparison function specified when the map was originally created.
Examples:
` mnew scmp | mmax = None listToMap scmp ("a" → 1, "b" → 2, Nil) | mmax = Some (Pair "b" 2) `Parameters:
map: Map a bReturn Type:
Option (Pair a b)
- def mlowerGE (key: k) (map: Map k v): Option (Pair k v)¶
Retrieve the “smallest” key from the map that is equal to or “larger than” a known point. This is determined according to the comparison function specified when the map was originally created.
Examples:
` mnew scmp | mmax = None listToMap scmp ("a" → 1, "b" → 2, Nil) | mlowerGE "a" = Some (Pair "a" 1) listToMap scmp ("a" → 1, "b" → 2, Nil) | mlowerGE "aaa" = Some (Pair "b" 2) `Parameters:
key: a, map: Map a bReturn Type:
Option (Pair a b)
- def mlowerGT (key: k) (map: Map k v): Option (Pair k v)¶
Retrieve the “smallest” key from the map that is strictly “larger than” a known point. This is determined according to the comparison function specified when the map was originally created.
Examples:
` mnew scmp | mmax = None listToMap scmp ("a" → 1, "b" → 2, Nil) | mlowerGT "a" = Some (Pair "b" 2) listToMap scmp ("a" → 1, "b" → 2, Nil) | mlowerGT "aaa" = Some (Pair "b" 2) `Parameters:
key: a, map: Map a bReturn Type:
Option (Pair a b)
- def mupperLT (key: k) (map: Map k v): Option (Pair k v)¶
Retrieve the “largest” key from the map that is strictly “smaller than” a known point. This is determined according to the comparison function specified when the map was originally created.
Examples:
` mnew scmp | mmax = None listToMap scmp ("a" → 1, "b" → 2, Nil) | mupperLT "b" = Some (Pair "a" 1) listToMap scmp ("a" → 1, "b" → 2, Nil) | mupperLT "aaa" = Some (Pair "a" 1) `Parameters:
key: a, map: Map a bReturn Type:
Option (Pair a b)
- def mupperLE (key: k) (map: Map k v): Option (Pair k v)¶
Retrieve the “largest” key from the map that is equal to or “smaller than” a known point. This is determined according to the comparison function specified when the map was originally created.
Examples:
` mnew scmp | mmax = None listToMap scmp ("a" → 1, "b" → 2, Nil) | mupperLE "b" = Some (Pair "b" 2) listToMap scmp ("a" → 1, "b" → 2, Nil) | mupperLE "aaa" = Some (Pair "a" 1) `Parameters:
key: a, map: Map a bReturn Type:
Option (Pair a b)
- def mlookup (key: k) (map: Map k v): Option v¶
Retrieve the value associated with a particular key in the map, if one exists.
If only the presence of the value matters, see mexists.
Examples:
` mnew scmp | mlookup "a" = None mnew scmp | minsert "a" 1 | mlookup "a" = Some 1 listToMap scmp ("a" → 1, "b" → 2, Nil) | mdelete "b" | mlookup "b" = None `Parameters:
key: a, map: Map a bReturn Type:
Option b
- def mcontains (key: k) (map: Map k v): Boolean¶
Check whether some key is associated with any value in the map.
Examples:
` mnew scmp | mcontains "a" = False mnew scmp | minsert "a" 1 | mcontains "a" = True listToMap scmp ("a" → 1, "b" → 2, Nil) | mdelete "b" | mcontains "b" = False `Parameters:
key: a, map: Map a bReturn Type:
Boolean
- def mexists (fn: k¶
Check whether the predicate succeeds for any key-value pair in the map.
Examples:
` mnew scmp | mcexists "a" = False mnew scmp | minsert "a" 1 | mexists "a" = True listToMap scmp ("a" → 1, "b" → 2, Nil) | mdelete "b" | mexists "b" = False `Parameters:
fn: a, b, Boolean, map: Map a bReturn Type:
Boolean
- def msplitBy (fn: k¶
Divide the key-value pairs comprising one map into two according to some predicate.
Returns: Pair trues falses where trues contains all the values for which fn returned True and falses where it returned False. Both resulting maps use the same key-comparison function as the original map.
Parameters:
fn: a, b, Boolean, map: Map a bReturn Type:
Pair (Map a b) (Map a b)
- def mfilter (fn: k¶
Discard any key-value pairs in the map for which the predicate fails.
Examples:
` listToMap scmp ("a" → 1, "b" → 2, Nil) | mfilter (\k\_ isVowel k) | mlookup "a" = Some 1 listToMap scmp ("a" → 1, "b" → 2, Nil) | mfilter (\k\_ isVowel k) | mlookup "b" = None `Parameters:
fn: a, b, Boolean, map: Map a bReturn Type:
Map a b
- def munion (left: Map k v) (right: Map k v): Map k v¶
Collect all key-value associations in either of two maps into a single one. If the same key occurs in both, the value from left is kept and the one from right is discarded. However, if the key comparison function differs between the two inputs, then the one from the right is used.
For a similar function which provides control over how to join values of keys occurring in both maps, see munionWith.
Examples: ``` def left = listToMap scmp (“a” → 1, “b” → 2, Nil) def right = listToMap scmp (“b” → 11, “f” → 15, Nil)
munion left right | mlookup “a” = Some 1 munion left right | mlookup “b” = Some 2 munion left right | mlookup “f” = Some 15 ```
Parameters:
left: Map a b, right: Map a bReturn Type:
Map a b
- def munionWith (fn: k¶
Collect all key-value associations in maps, with the given conflict resolultion. If the key comparison function differs between the two inputs, then the one from the right is used.
If simply keeping the original in any conflicts, consider using munion instead.
Examples: ``` def left = listToMap scmp (“a” → 1, “b” → 2, Nil) def right = listToMap scmp (“b” → 11, “f” → 15, Nil)
munionWith (_lvrv lv + rv) left right | mlookup “a” = Some 1 munionWith (_lvrv lv + rv) left right | mlookup “b” = Some 13 munionWith (_lvrv lv + rv) left right | mlookup “f” = Some 15 ```
Parameters:
fn: a, b, b, b, left: Map a b, right: Map a bReturn Type:
Map a b
- def msubtract (left: Map k v) (right: Map k v): Map k v¶
Remove all keys from the left map which occur (regardless of value) in the right. If the key comparison function differs between the two inputs, then the one from the right is used.
Examples: ``` def left = listToMap scmp (“a” → 1, “b” → 2, Nil) def right = listToMap scmp (“b” → 11, “f” → 15, Nil)
msubtract left right | mlookup “a” = Some 1 msubtract left right | mlookup “b” = None msubtract left right | mlookup “f” = None ```
Parameters:
left: Map a b, right: Map a bReturn Type:
Map a b
- def mintersect (left: Map k v) (right: Map k v): Map k v¶
Remove all keys from the left map which do not occur in the right. For all keys, the value from left is kept and the one from right is discarded. However, if the key comparison function differs between the two inputs, then the one from the right is used.
For a similar function which provides control over how to join the values contained in the map, see mintersectWith.
Examples: ``` def left = listToMap scmp (“a” → 1, “b” → 2, Nil) def right = listToMap scmp (“b” → 11, “f” → 15, Nil)
mintersect left right | mlookup “a” = None mintersect left right | mlookup “b” = Some 2 mintersect left right | mlookup “f” = None ```
Parameters:
left: Map a b, right: Map a bReturn Type:
Map a b
- def mintersectWith (fn: k¶
Remove all keys which do not occur in both maps, joining values accordingly. If the key comparison function differs between the two inputs, then the one from the right is used.
If simply keeping the original, consider using mintersect instead.
Examples: ``` def left = listToMap scmp (“a” → 1, “b” → 2, Nil) def right = listToMap scmp (“b” → 11, “f” → 15, Nil)
mintersectWith (_lvrv lv + rv) left right | mlookup “a” = None mintersectWith (_lvrv lv + rv) left right | mlookup “b” = Some 13 mintersectWith (_lvrv lv + rv) left right | mlookup “f” = None ```
Parameters:
fn: a, b, b, b, left: Map a b, right: Map a bReturn Type:
Map a b
option.wake¶
- def isSome: Option a => Boolean¶
isSome: Report if an Option has a value. If you find yourself using the function, consider using a match instead.
isSome (Some 451) = True isSome (Some “x”) = True isSome None = False
Parameters:
Option aReturn Type:
Boolean
- def isNone: Option a => Boolean¶
isNone: Report if an Option has no value. If you find yourself using the function, consider using a match instead.
isNone (Some 451) = False isNone (Some “x”) = False isNone None = True
Parameters:
Option aReturn Type:
Boolean
- def getOrElse (default: a): Option a => a¶
getOrElse: extract the value from an Option, with a supplied default if None. The default value expression is evaluated whether or not the Option is None.
int “not-an-integer” # Option Integer | getOrElse 5 # Integer — 5
Parameters:
default: a, Option aReturn Type:
a
- def getOrElseFn (fn: Unit => a): Option a => a¶
getOrElse: extract the value from an Option, with a supplied default function if None. The default value function is evaluated only when the Option is None.
int “567” | getOrElseFn (Unit firstFactorOf 8947289472892423423423423235325) — 567
Parameters:
fn: Unit, a, Option aReturn Type:
a
- def orElse (alternate: Option a): Option a => Option a¶
orElse: combine two Options, using the first value found, if any.
int “not-an-integer” | orElse (int “343”) | orElse (int “asd”) — Some 343
Parameters:
alternate: Option a, Option aReturn Type:
Option a
- def omap (f: a => b): Option a => Option b¶
omap: apply function f to the optional contents If you find yourself using the function with getOrElse, consider using a match instead.
omap (_+1) (Some 4) = Some 5 omap (_+1) None = None
Parameters:
f: a, b, Option aReturn Type:
Option b
- def omapPartial (f: a => Option b): Option a => Option b¶
omapPartial: apply partial function ‘f’ to the optional contents A partial function returns Option; only Some cases result in a value.
def divideEven x = if x&1 == 1 then None else Some (x / 2)
omapPartial divideEven None = None omapPartial divideEven (Some 8) = Some 4 omapPartial divideEven (Some 7) = None
Parameters:
f: a, Option b, Option aReturn Type:
Option b
- def omapFailable (fn: a => Result b fail): Option a => Result (Option b) fail¶
omapFailable: A variant of omap that calls a function on a non-empty option that returns a Result type. The Result-type-ness is then hoist outside the resulting option, making it easier to write require Pass statements on code that maps over Option types.
Parameters:
fn: a, Result b c, Option aReturn Type:
Result (Option b) c
- def ofilter (f: a => Boolean): Option a => Option a¶
ofilter: remove the contents of an option when f returns False.
def isEven x = x&x == 0 ofilter isEven None = None ofilter isEven (Some 7) = None ofilter isEven (Some 8) = Some 8
Parameters:
f: a, Boolean, Option aReturn Type:
Option a
- def findSomeFn (fn: a¶
findSomeFn: return the first Some output by ‘fn’ on a List or else None Once a Some is found, fn is not evaluated on further elements. This means that fn is applied to the List mostly sequentially. If more parallelism is desired, use ‘map fn | findSome’ instead.
findSomeFn int (“abc”, “456”, “zz”, “123”, Nil) = Some 456 findSomeFn int (“abc”, “_56”, “zz”, “_23”, Nil) = None
Parameters:
fn: a, Option b, List aReturn Type:
Option b
- def findNoneFn (fn: a¶
findNoneFn: if fn returns Some for all List elements, return the outputs else None Once a None is found, fn is not evaluated on further elements. This means that fn is applied to the List mostly sequentially. If more parallelism is desired, use ‘map fn | findNone’ instead.
findNoneFn int (“456”, “123”, Nil) = Some (456, 123, Nil) findNoneFn int (“_56”, “123”, Nil) = None
Parameters:
fn: a, Option b, List aReturn Type:
Option (List b)
- def getOrFail (failVal: fail): Option pass¶
getOrFail: Convert Some to Pass and None to a Fail with the supplied value. The fail expression is evaluated even when the Option is None.
int “not-an-integer” | getOrFail “some error” — Fail “some error”
int “81234” | getOrFail “some error” — Pass 81234
Parameters:
failVal: a, Option bReturn Type:
Result b a
- def getOrFailFn (failFn: Unit => fail): Option pass => Result pass fail¶
getOrFailFn: Convert Some to Pass and None to a Fail with the function output. The fail function is evaluated only when the Option is None.
int “not-an-integer” | getOrFailFn (Unit “some error”) — Fail “some error”
int “81234” | getOrFailFn (Unit “some error”) — Pass 81234
Parameters:
failFn: Unit, a, Option bReturn Type:
Result b a
- def getOrPass (passVal: pass): Option fail¶
getOrPass: Convert Some to Fail and None to a Pass with the supplied value. The fail expression is evaluated even when the Option is None.
int “not-an-integer” | getOrPass “some error” — Pass “some error”
int “81234” | getOrPass “some error” — Fail 81234
Parameters:
passVal: a, Option bReturn Type:
Result a b
- def getOrPassFn (passFn: Unit => pass): Option fail => Result pass fail¶
getOrPassFn: Convert Some to Fail and None to a Pass with the function output. The pass function is evaluated only when the Option is None.
int “not-an-integer” | getOrFailFn (Unit “some error”) — Pass “some error”
int “81234” | getOrFailFn (Unit “some error”) — Fail 81234
Parameters:
passFn: Unit, a, Option bReturn Type:
Result a b
- def optionToListFn (fn: a => List b) (option: Option a): List b¶
optionToListFn: Converts an Option to a list consisting of either the inner value of Some with the given fn applied to it or the empty list in the case of None.
Examples:
` optionToListFn (_ * 2, Nil) (Some 2) = 4, Nil optionToListFn (_ * 2 | str, Nil) (Some 2) = "4", Nil optionToListFn (_, Nil) None = Nil `Parameters:
fn: a, List b, option: Option aReturn Type:
List b
- def optionEqual (equalityFn: a¶
optionEqual: Using the given equality testing function, determines whether two option values are equal or not. The equality testing function is only used when both values are a Some and allows for the two underlying types to be different.
Examples:
` optionEqual (_==_) (Some 1) (Some 1) = True optionEqual (_==_) (Some 1) (Some 2) = False optionEqual (str _ ==* _) (Some 0) (Some "0") = True optionEqual (_==_) None None = True optionEqual (_==*_) (Some "test") None = False `Parameters:
equalityFn: a, b, Boolean, option1: Option a, option2: Option bReturn Type:
Boolean
tuple.wake¶
- tuple Pair a b¶
Creates a
Pair, a tuple containing two elements.Parameters:
First: a, Second: bReturn Type:
Pair a b
- tuple Triple a b c¶
Creates a
Triple, a tuple containing three elements.Parameters:
First: a, Second: b, Third: cReturn Type:
Triple a b c
- def _0 (x; _)¶
Handy accessor methods
Parameters:
a ; bReturn Type:
a
- def _1 (_; x; _)¶
No description for this feature yet.
Parameters:
a ; b ; cReturn Type:
b
- def _2 (_; _; x; _)¶
No description for this feature yet.
Parameters:
a ; b ; c ; dReturn Type:
c
- def _3 (_; _; _; x; _)¶
No description for this feature yet.
Parameters:
a ; b ; c ; d ; eReturn Type:
d
- def _4 (_; _; _; _; x; _)¶
No description for this feature yet.
Parameters:
a ; b ; c ; d ; e ; fReturn Type:
e
- def _5 (_; _; _; _; _; x; _)¶
No description for this feature yet.
Parameters:
a ; b ; c ; d ; e ; f ; gReturn Type:
f
- def _6 (_; _; _; _; _; _; x; _)¶
No description for this feature yet.
Parameters:
a ; b ; c ; d ; e ; f ; g ; hReturn Type:
g
- def _7 (_; _; _; _; _; _; _; x; _)¶
No description for this feature yet.
Parameters:
a ; b ; c ; d ; e ; f ; g ; h ; iReturn Type:
h
- def _8 (_; _; _; _; _; _; _; _; x; _)¶
No description for this feature yet.
Parameters:
a ; b ; c ; d ; e ; f ; g ; h ; i ; jReturn Type:
i
- def _9 (_; _; _; _; _; _; _; _; _; x; _)¶
No description for this feature yet.
Parameters:
a ; b ; c ; d ; e ; f ; g ; h ; i ; j ; kReturn Type:
j
json.wake¶
- def getJString: JValue => Option String¶
No description for this feature yet.
Parameters:
JValueReturn Type:
Option String
- def getJInteger: JValue => Option Integer¶
No description for this feature yet.
Parameters:
JValueReturn Type:
Option Integer
- def getJDouble: JValue => Option Double¶
No description for this feature yet.
Parameters:
JValueReturn Type:
Option Double
- def getJBoolean: JValue => Option Boolean¶
No description for this feature yet.
Parameters:
JValueReturn Type:
Option Boolean
- def getJObject: JValue => Option (List (Pair String JValue))¶
No description for this feature yet.
Parameters:
JValueReturn Type:
Option (List (Pair String JValue))
- def getJArray: JValue => Option (List JValue)¶
No description for this feature yet.
Parameters:
JValueReturn Type:
Option (List JValue)
- def parseJSONBody (body: String): Result JValue Error¶
No description for this feature yet.
Parameters:
body: StringReturn Type:
Result JValue Error
- def parseJSONFile (path: Path): Result JValue Error¶
No description for this feature yet.
Parameters:
path: PathReturn Type:
Result JValue Error
- def jsonEscape str¶
No description for this feature yet.
Parameters:
str: StringReturn Type:
String
- def customFormatJSON fmt body¶
No description for this feature yet.
Parameters:
fmt: JSONFormat, body: JValueReturn Type:
String
- def root /| filterFn¶
No description for this feature yet.
Parameters:
root: JValue, filterFn: JValue, BooleanReturn Type:
JValue
- def jfilter filterFn root¶
No description for this feature yet.
Parameters:
filterFn: JValue, Boolean, root: JValueReturn Type:
JValue
- def root /../ filterFn¶
No description for this feature yet.
Parameters:
root: JValue, filterFn: JValue, BooleanReturn Type:
JValue
- def jfind filterFn root¶
No description for this feature yet.
Parameters:
filterFn: JValue, Boolean, root: JValueReturn Type:
JValue
- def jempty root¶
No description for this feature yet.
Parameters:
root: JValueReturn Type:
Boolean
- def jlist root¶
No description for this feature yet.
Parameters:
root: JValueReturn Type:
List JValue
- def x // y¶
No description for this feature yet.
Parameters:
x: JValue, y: RegExpReturn Type:
JValue
- def x ==/ y¶
No description for this feature yet.
Parameters:
x: JValue, y: JValueReturn Type:
Boolean
- def normalizeJSONWith (fmt: JSONNormalize) (json: JValue): Result JValue Error¶
Simplify a JSON structure according to the rules given. For example, Wake’s implementation of JSON is more lenient than the base standards, so if maximum compatibility is desired in situations where some other implementation may be parsing generated output, normalizeJSONCompat may be used to target that lowest common denominator (see normalizeJSON for that particular case).
Note that the relevant normalization is applied to each member of a JArray or JObject before the enclosing container. This means that if some normalization fails anywhere in the JSON tree the entire call will fail, even if the specific branch causing the failure would later have been pruned.
Parameters:
fmt: JSONNormalize, json: JValueReturn Type:
Result JValue Error
- def mergeJSON (jsons: List JValue): Result JValue Error¶
Attempt to merge several JSON structures, while resolving any duplicate keys. In particular, this function will concatenate the members of two JArray values, treat JNull as a wildcard placeholder, and otherwise return the original value if both instances are equal. It fails if the same location in the object tree is associated with multiple values of different types or with different values of a type which cannot be combined. Returns a JNull value if passed an empty list.
Parameters:
jsons: List JValueReturn Type:
Result JValue Error
- def overrideJSON (jsons: List JValue): JValue¶
Use the value of the key appearing last in the list, but recurse into JObject`s. Essentially, allows overwriting any key in the object tree by specifying a new value at the same place in a later tree. Returns `JNull if given an empty list.
If some location has both JObject values and values of other types, any JObject values before the last non-JObject value will be dropped:
` ("\{\"key\":\{\"firstSubkey\":1\}\}", "\{\"key\":\{\"secondSubkey\":2\}\}", Nil) | findFailFn parseJSONBody | rmapPass lastValueInList | rmap formatJSON Pass "\{\"key\":\{\"firstSubkey\":1,\"secondSubkey\":2\}\}" `` ("\{\"firstKey\":1\}", "2", "\{\"secondKey\":3\}", Nil) | findFailFn parseJSONBody | rmapPass lastValueInList | rmap formatJSON Pass "\{\"secondKey\":3\}" `Parameters:
jsons: List JValueReturn Type:
JValue
- tuple JSONNormalize¶
The rules by which normalizeJSONWith will simplify JSON values. If any particular function is unable to operate on every input value (e.g. a JObject contains duplicate keys of types which cannot be combined), that rule may return a Fail which halts the broader processing.
Parameters:
String: String, Result String Error, Integer: Integer, Result Integer Error, Double: Double, Result Double Error, Boolean: Boolean, Result Boolean Error, Object: List Pair String JValue, Result List Pair String JValue Error, Array: List JValue, Result List JValue ErrorReturn Type:
JSONNormalize
- def lastValueInList (values: List JValue): Result JValue Error¶
Use the value of the key appearing last in the list, but recurse into JObject`s. Essentially, allows overwriting any key in the object tree by specifying a new value at the same place in a later tree. Will always always succeed, returning `Pass JNull if given an empty list.
See overrideJSON for examples of usage.
Parameters:
values: List JValueReturn Type:
Result JValue Error
string.wake¶
- def strlen (string: String): Integer¶
strlen: report the number of bytes a String consumes in UTF-8 representation. >>>>>>>>>>>>> THIS IS NOT THE NUMBER OF CHARACTERS IN A STRING <<<<<<<<<<<<<< This information can be relevant when reading / writing Strings to disk. To manipulate Strings, such as extract-ing a substring, use regular expressions.
Parameters:
string: StringReturn Type:
Integer
- def cat (strings: List String): String¶
cat: concatenate a List of Strings into a String. If you have a finite list of terms, consider using String interpolation.
cat (“hello”, ” “, “world”, Nil) = “hello world” cat (x, “:”, y, “:”, z, Nil) = “{x}:{y}:{z}”
Parameters:
strings: List StringReturn Type:
String
- def catWith (separator: String) (strings: List String): String¶
catWith: concatenate a List of Strings with a separator.
seq 10 | map str | catWith “:” — “0:1:2:3:4:5:6:7:8:9”
Parameters:
separator: String, strings: List StringReturn Type:
String
- def explode (string: String): List String¶
explode: split a String up into Unicode code points This is rarely useful; consider using a RegExp instead.
explode “hello” = “h”, “e”, “l”, “l”, “o”, Nil explode “süß” = “s”, “ü”, “ß”, Nil
Parameters:
string: StringReturn Type:
List String
- def strbase (base: Integer): Option (Integer¶
strbase: convert an Integer into a String using a given base.
For 2 <= base <= 36, the characters used for the encoding are: 0123456789abcdefghijklmnopqrstuvwxyz ^^^^^^^^^^^^^^^^ = base 16 ^^^^^^^^^^ = base 10 For 37 <= base <= 62, the characters used for the encoding are: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz For -36 <=x <= -2, the characters used for the encoding are: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ For any other (invalid) base, the String “” is returned.
strbase 10 500 = “500” strbase 16 65535 = “ffff” strbase (-15) 65535 = “FFFF”
Parameters:
base: Integer, Option integerToFormat: IntegerReturn Type:
String)
- def intbase (base: Integer) (stringToParse: String): Option Integer¶
intbase: convert a String into an Option Integer using a given base.
For base == 0, the string is checked for these prefixes: “0b” or “0B” – base= 2 processing for everything after the prefix “0x” or “0X” – base=16 processing for everything after the prefix “0” – base= 8 processing for everything after the prefix otherwise, process the String as base=10 For 2 <= base <= 36, upper- and lower-case characters are treated identically. For 37 <= base <= 62, upper-case letters represent 10..35 while lower-case letters represent 36..61.
For any other base (or an illegal input String), None is returned.
Parameters:
base: Integer, stringToParse: StringReturn Type:
Option Integer
- def filterTerminalCodes (str: String): String¶
No description for this feature yet.
Parameters:
str: StringReturn Type:
String
- def int (stringToParse: String): Option Integer¶
int: convert a String into an Integer with the usual prefixes.
The base used for the conversion depends on the prefix: “0b” or “0B” – base= 2 processing for everything after the prefix “0x” or “0X” – base=16 processing for everything after the prefix “0” – base= 8 processing for everything after the prefix otherwise, process the String as base=10
int “0x10” = Some 16 int “10” = Some 10 int “0b10” = Some 2 int “0y10” = None
Parameters:
stringToParse: StringReturn Type:
Option Integer
- def integerToUnicode (codepoint: Integer): String¶
integerToUnicode: convert an Integer into a Unicode codepoint. For Integers <= 127, this is the ASCII character set. For Integers < 0, returns “”.
integerToUnicode (-2) = “” integerToUnicode 48 = “0” integerToUnicode 65 = “A” integerToUnicode 97 = “a” integerToUnicode 231 = “ç” integerToUnicode 0x1f600 = “😀” integerToUnicode 0 = “x00”
Parameters:
codepoint: IntegerReturn Type:
String
- def unicodeToInteger (firstCharacterToConvert: String): Integer¶
unicodeToInteger: convert the first codepoint in a String to an Integer.
unicodeToInteger “A” = 65 unicodeToInteger “a” = 97 unicodeToInteger “0123” = 48 unicodeToInteger “😀!” = 128512 unicodeToInteger “” = 0 unicodeToInteger “0a” = 0
Parameters:
firstCharacterToConvert: StringReturn Type:
Integer
- def integerToByte (byte: Integer): String¶
integerToByte: convert an Integer into a String using raw binary. WARNING: For 128 <= byte <= 255, this function creates invalid UTF-8 / Unicode. Instead of calling this function, you probably meant to call integerToUnicode. For byte < 0 or byte > 255, returns “”.
integerToByte 0 = “x00” integerToByte 65 = “A” integerToByte 97 = “A” integerToByte 256 = “” integerToByte 231 = (an illegal UTF-8 String which includes a byte with value 0xe7)
It is possible to create legal UTF-8 from illegal String fragments; eg: “{integerToByte 0xc3}{integerToByte 0xa7}” = “ç”
Parameters:
byte: IntegerReturn Type:
String
- def byteToInteger (firstByteToConvert: String): Integer¶
byteToInteger: convert the first byte of a UTF-8-encoded String into an Integer. Instead of calling this function, you probably meant to call unicodeToInteger.
byteToInteger “” = 0 byteToInteger “x00” = 0 byteToInteger “A” = 65 byteToInteger (integerToByte 231) = 231
Parameters:
firstByteToConvert: StringReturn Type:
Integer
- def unicodeToBytes (str: String): List Integer¶
unicodeToBytes: Convert a unicode string the to a list of the exact backing bytes. If you are using this function you are probably using it wrong. Consider using unicodeToInteger. The only safe way to use this function is when pairing it with bytesToUnicode without any modification of the underlying bytes.
unicodeToBytes “aɪ̯pʰi” = 97, 201, 170, 204, 175, 112, 202, 176, 105, Nil
Parameters:
str: StringReturn Type:
List Integer
- def bytesToUnicode (bytes: List Integer): String¶
bytesToUnicode: Convert a list of exact backing bytes to the representative unicode string. If you are using this function you are probably using it wrong. Consider using integerToUnicode. The only safe way to use this function is when pairing it with unicodeToBytes without any modification of the underlying bytes.
bytesToUnicode (97, 201, 170, 204, 175, 112, 202, 176, 105, Nil) = “aɪ̯pʰi”
Parameters:
bytes: List IntegerReturn Type:
String
- def unicodeCanonical (str: String): String¶
unicodeCanonical: eliminate combining characters; C+◌̧ => Ç
Parameters:
str: StringReturn Type:
String
- def unicodeIdentifier (str: String): String¶
unicodeIdentifier: eliminate rendering distinctions; ¼i⁹ => 1/4i9
Parameters:
str: StringReturn Type:
String
- def unicodeLowercase (str: String): String¶
unicodeLowercase: converts upper case codepoints to their lower case counterparts
Parameters:
str: StringReturn Type:
String
- def unicodeUppercase (str: String): String¶
unicodeUppercase: converts lower case codepoints to their upper case counterparts
Parameters:
str: StringReturn Type:
String
- def sortStrings (list: List String): List String¶
sortStrings: sort a list of strings as a human would judge them.
Parameters:
list: List StringReturn Type:
List String
- def scmpCanonical (x: String) (y: String): Order¶
Unicode NFC string comparison Ç == C+◌̧
Parameters:
x: String, y: StringReturn Type:
Order
- def scmpIdentifier (x: String) (y: String): Order¶
Unicode NFKC string comparison (¼i⁹ = 1/4i9)
Parameters:
x: String, y: StringReturn Type:
Order
- def scmpLowercase (x: String) (y: String): Order¶
Unicode case insensitive NFKC comparison
Parameters:
x: String, y: StringReturn Type:
Order
- def scmp (x: String) (y: String): Order¶
Raw binary string comparison; no normalization performed
Parameters:
x: String, y: StringReturn Type:
Order
- def (x: String) <=>~ (y: String): Order¶
NFKC order (fancy format removed) – secure default This is the string order you should use to compare human inputs
Parameters:
x: String, y: StringReturn Type:
Order
- def (x: String) <~ (y: String): Boolean¶
Returns True if x is less than y, as a human would judge it.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) >~ (y: String): Boolean¶
Returns True if x is greater than y, as a human would judge it.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) >=~ (y: String): Boolean¶
Returns True if x is greater than or equal to y, as a human would judge it.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) <=~ (y: String): Boolean¶
Returns True if x is less than or equal to y, as a human would judge it.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String)¶
Returns True if x is equal to y, as a human would judge it.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) !=~ (y: String): Boolean¶
Returns True if x is not equal to y, as a human would judge it.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) <=>^ (y: String): Order¶
Case insensitive order (^ = capitals ignored)
Parameters:
x: String, y: StringReturn Type:
Order
- def (x: String) <^ (y: String): Boolean¶
Returns True if x is less than y, ignoring case.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) >^ (y: String): Boolean¶
Returns True if x is greater than y, ignoring case.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) >=^ (y: String): Boolean¶
Returns True if x is greater than or equal to y, ignoring case.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) <=^ (y: String): Boolean¶
Returns True if x is less than or equal to y, ignoring case.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String)¶
Returns True if x is equal to y, ignoring case.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) !=^ (y: String): Boolean¶
Returns True if x is not equal to y, ignoring case.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) <=>* (y: String): Order¶
Raw binary string order Only use this for non-textual data
Parameters:
x: String, y: StringReturn Type:
Order
- def (x: String) <* (y: String): Boolean¶
Returns True if x is less than y, in UTF-8 representation.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) >* (y: String): Boolean¶
Returns True if x is greater than y, in UTF-8 representation.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) >=* (y: String): Boolean¶
Returns True if x is greater than or equal to y, in UTF-8 representation.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) <=* (y: String): Boolean¶
Returns True if x is less than or equal to y, in UTF-8 representation.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String)¶
Returns True if x is equal to y, in UTF-8 representation.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def (x: String) !=* (y: String): Boolean¶
Returns True if x is not equal to y, in UTF-8 representation.
Parameters:
x: String, y: StringReturn Type:
Boolean
- def hashString (x: String): String¶
No description for this feature yet.
Parameters:
x: StringReturn Type:
String
integer.wake¶
- def +(x: Integer): Integer¶
Unary positive sign operator for Integer values. (+5) = 5
Parameters:
x: IntegerReturn Type:
Integer
- def -(x: Integer): Integer¶
Unary negative sign operator for Integer values. (-5) = 0-5
Parameters:
x: IntegerReturn Type:
Integer
- def ~(x: Integer): Integer¶
Unary two’s complement operator for Integer values. ~0 = -1 ~4 = -5
Parameters:
x: IntegerReturn Type:
Integer
- def (x: Integer) + (y: Integer): Integer¶
Binary addition operator for Integer values. 1 + 2 = 3 1 + 5 = 6
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def (x: Integer) - (y: Integer): Integer¶
Binary subtraction operator for Integer values. 2 - 1 = 1 3 - 4 = -1
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def (x: Integer) * (y: Integer): Integer¶
Binary multiplication operator for Integer values. 3 * 4 = 12 -3 * (-4) = 12
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def (x: Integer) / (y: Integer): Integer¶
Binary division operator for Integer values. 12 / 3 = 4 13 / 3 = 4 -8 / 4 = -2
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def (x: Integer) % (y: Integer): Integer¶
Binary remainder operator for Integer values. 11 % 5 = 1 4 % 5 = 5 7 % 5 = 2
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def (x: Integer) << (y: Integer): Integer¶
Binary left shift operator for Integer values. 1 << 10 = 1024 3 << 8 = 768
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def (x: Integer) >> (y: Integer): Integer¶
Binary right shift operator for Integer values. 1024 >> 11 = 0 1024 >> 9 = 2 768 >> 8 = 3
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def (x: Integer) ^ (y: Integer): Integer¶
Binary exponentiation operator for Integer values. 2^8 = 256 3^2 = 9 5^3 = 125
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def root (n: Integer) (x: Integer): Option Integer¶
Returns the n-th root of x. root 2 9 = Some 3 root 3 27 = Some 3 root 3 28 = Some 3 root 3 (-27) = Some -3 root 2 (-9) = None
Parameters:
n: Integer, x: IntegerReturn Type:
Option Integer
- def sqrt (x: Integer): Option Integer¶
Unary square root operator. sqrt 9 = Some 3 sqrt (-9) = None
Parameters:
x: IntegerReturn Type:
Option Integer
- def abs (x: Integer): Integer¶
Unary absolute-value operator.
Parameters:
x: IntegerReturn Type:
Integer
- def xor (x: Integer) (y: Integer): Integer¶
Binary bitwise XOR operator. xor 4 4 = 0 xor 4 3 = 7 xor (-4) (-3) = 1
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def and (x: Integer) (y: Integer): Integer¶
Binary bitwise AND operator. and 4 4 = 4 and 4 3 = 0 and (-4) (-3) = -4
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def or (x: Integer) (y: Integer): Integer¶
Binary bitwise OR operator. or 4 4 = 4 or 4 3 = 7 or (-4) (-3) = -3
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def gcd (x: Integer) (y: Integer): Integer¶
Greatest Common Divisor. gcd 4 4 = 4 gcd 4 3 = 1 gcd (-4) (-3) = 1
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def lcm (x: Integer) (y: Integer): Integer¶
Least Common Multiple. lcm 4 4 = 4 lcm 4 3 = 12 lcm (-4) (-3) = 12
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def powm (x: Integer) (y: Integer) (m: Integer): Integer¶
Computes (x^y) % m. powm 2 7 5 = 4 powm 3 2 2 = 1
Parameters:
x: Integer, y: Integer, m: IntegerReturn Type:
Integer
- def icmp (x: Integer) (y: Integer): Order¶
Compare two Integers for Order icmp 4 5 = LT icmp 5 5 = EQ icmp 5 4 = GT
Parameters:
x: Integer, y: IntegerReturn Type:
Order
- def (x: Integer) <=> (y: Integer): Order¶
Compare two Integers for Order 4 <=> 5 = LT 5 <=> 5 = EQ 5 <=> 4 = GT
Parameters:
x: Integer, y: IntegerReturn Type:
Order
- def (x: Integer) < (y: Integer): Boolean¶
Binary Less-Than operator for Integers. 4 < 5 = True 4 < 4 = False 5 < 4 = False
Parameters:
x: Integer, y: IntegerReturn Type:
Boolean
- def (x: Integer) > (y: Integer): Boolean¶
Binary Greater-Than operator for Integers. 4 > 5 = False 4 > 4 = False 5 > 4 = True
Parameters:
x: Integer, y: IntegerReturn Type:
Boolean
- def (x: Integer) >= (y: Integer): Boolean¶
Binary Greater-Or-Equal operator for Integers. 4 >= 5 = False 4 >= 4 = True 5 >= 4 = True
Parameters:
x: Integer, y: IntegerReturn Type:
Boolean
- def (x: Integer) <= (y: Integer): Boolean¶
Binary Less-Or-Equal operator for Integers. 4 <= 5 = True 4 <= 4 = True 5 <= 4 = False
Parameters:
x: Integer, y: IntegerReturn Type:
Boolean
- def (x: Integer)¶
Binary Is-Equal operator for Integers. 4 == 5 = False 4 == 4 = True 5 == 4 = False
Parameters:
x: Integer, y: IntegerReturn Type:
Boolean
- def (x: Integer) != (y: Integer): Boolean¶
Binary Not-Equal operator for Integers. 4 == 5 = True 4 == 4 = False 5 == 4 = True
Parameters:
x: Integer, y: IntegerReturn Type:
Boolean
- def min (x: Integer) (y: Integer): Integer¶
Calculates the minimum of two Integers. min 4 5 = 4
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def max (x: Integer) (y: Integer): Integer¶
Calculates the maximum of two Integers. max 4 5 = 5
Parameters:
x: Integer, y: IntegerReturn Type:
Integer
- def ∏(l: List Integer): Integer¶
No description for this feature yet.
Parameters:
l: List IntegerReturn Type:
Integer
- def ∑(l: List Integer): Integer¶
No description for this feature yet.
Parameters:
l: List IntegerReturn Type:
Integer
list.wake¶
- def element,¶
Create a singleton list from a value. This can be used to slightly increase the niceness of lists by avoid the Nil at the end. This is especially nice for vertical lists.
Examples:
` 10, # Create a singleton list containing just 10 1, 2, 3, # Create a list of 3 elements without using Nil (1, 2, 3,) ++ (4, 5, 6,) # append two lists `Parameters:
element: aReturn Type:
List a
- def empty: List a => Boolean¶
Report if the list contains no elements. If you find yourself using the function, consider using match instead.
Examples:
` empty Nil = True empty (seq 0) = True empty (1, Nil) = False empty (seq 9) = False `Parameters:
List aReturn Type:
Boolean
- def single (element: a): List a¶
Wrap a given value in a single-element list. Consider using ‘_, Nil’ directly as it is more idiomatic.
Examples:
` single 1 = 1, Nil single True = "foo", Nil omap single (Some "foo") = Some ("foo", Nil) `Parameters:
element: aReturn Type:
List a
- def head: List a => Option a¶
Retrieve the first element of the list, else None. If you find yourself using the function, consider using match instead.
Examples:
` head Nil = None head ("a", "b", Nil) = Some "a" head (seq 10) = Some 0 `Parameters:
List aReturn Type:
Option a
- def tail: List a => List a¶
Remove the first element from the List If you find yourself using the function, consider using match instead.
Examples:
` tail (seq 5) = 1, 2, 3, 4, Nil tail ("a", Nil) = Nil tail Nil = Nil tail (pi, 1.0, Nil) = 1.0, Nil `Parameters:
List aReturn Type:
List a
- def map (mapFn: a¶
Create a new List by applying the function mapFn to each element of list. The map function (along with foldl) is generally how one implements loops in wake. This function (like most in wake) runs mapFn in parallel.
Parameters: - mapFn: The function to apply to each element - list: The List of elements to feed to mapFn
Guarantees: - The resultant List has the same length as list
Examples:
` map str (3, 9, Nil) = "3", "9", Nil map (_+100) (3, 9, Nil) = 103, 109, Nil `Parameters:
mapFn: a, b, list: List aReturn Type:
List b
- def mapFlat (mapFn: a¶
Create a new List by applying a function f to each element and concatenating the output.
Parameters: - mapFn: The function to apply to each element - list: The list of elements to feed to mapFn
Examples:
` def twice x = x, x, Nil mapFlat twice (seq 3) = 0, 0, 1, 1, 2, 2, Nil mapFlat seq (seq 5) = 0, 0, 1, 0, 1, 2, 0, 1, 2, 3, Nil `Parameters:
mapFn: a, List b, list: List aReturn Type:
List b
- def mapPartial (f: a¶
Create a new List by applying a partial function to each element of a List. Partial functions can return None, in which case the result is not included in the output.
Parameters: - mapFn: The partial function to apply to each element - list: The list of elements to feed to mapFn
Guarantees: - The resultant List is no longer than list
Examples:
` mapPartial int ("3", "x", "44", Nil) = 3, 44, Nil `Parameters:
f: a, Option b, list: List aReturn Type:
List b
- def foldl (combiningFn: accumulator¶
Combine the elements of a List front-to-back into a single value. An accumulator is updated from its initial value by combiningFn for each element.
In C++ syntax, foldl <combiningFn> <accumulateInitalValue> <List> does:
`c++ auto accumulator = <accumulateInitalValue>; for (element : <List>) accumulator = combiningFn(accumulator, element); return accumulator; `In python this is similar to functools.reduceParameters: - combiningFn: The function to combine elements of the list with the accumulator - initialValue: The initial value of the accumulator - list: The list to combine the elements of
Examples:
` foldl f x Nil = x foldl f x (a, b, c, Nil) = f (f (f x a) b) c foldl (_+_) 0 (seq 6) = 15 foldl (_*_) 0 l = 0 `Parameters:
combiningFn: a, b, a, accumulator: a, List bReturn Type:
a
- def scanl (combiningFn: accumulator¶
Create a new List from an accumulator run over the elements front-to-back. The last element of the produced List is equivalent to the result of foldl.
Parameters: - combiningFn: The function to combine elements of the list with the accumulator - initialValue: The initial value of the accumulator - list: The list to scan over
Guarantees: - The resultant List is exactly one element longer than list - The first element of the resultant List will be initialValue - The last element of the resultant List will be equal to foldl combiningFn initialValue list - If combiningFn is a group operation, the difference between the resultants yields list
Examples:
` scanl f z Nil = z scanl (_+_) 100 (seq 6) = 100, 100, 101, 103, 106, 110, 115, Nil ^^^- 100+0+1+2+3+4+5 ^^^- 100+0+1+2 ^^^- 100+0 ^^^- 100 `Parameters:
combiningFn: a, b, a, accumulator: a, List bReturn Type:
List a
- def foldr (combiningFn: element¶
Combine the elements of a List back-to-front into a single value. An accumulator is updated from its initial value by combiningFn for each element.
Parameters: - combiningFn: The function to combine elements of the list with the accumulator - initialValue: The initial value of the accumulator - list: The list to combine the elements of
Examples:
` foldr f x Nil = x foldr f x (a, b, c, Nil) = f a (f b (f c x)) foldr (_,_) y x = x ++ y `Parameters:
combiningFn: a, b, b, accumulator: b, List aReturn Type:
b
- def scanr (combiningFn: element¶
Create a new List from an accumulator run over the elements back-to-front. The first element of the produced List is equivalent to the result of a foldr.
Parameters: - combiningFn: The function to combine elements of the list with the accumulator - initialValue: The initial value of the accumulator - list: The list to scan over
Guarantees: - The resultant List is exactly one element longer than list - The first element of the resultant List will be foldl combiningFn initialValue list - The last element of the resultant List will be equal to initialValue - If combiningFn is a group operation, the difference between the resultants yields list
Examples:
` scanr scanr (_+_) 100 (seq 6) = 115, 115, 114, 112, 109, 105, 100, Nil ^^^- 100 ^^^- 5+100 ^^^- 1+2+3+4+5+100 ^^^- 0+1+2+3+4+5+100 `Parameters:
combiningFn: a, b, b, accumulator: b, List aReturn Type:
List b
- def (l: List a) ++ (r: List a): List a¶
Concatenate two lists into one List. The ++ operator must be provided by the wake package for publish to work.
Guarantees: - ++ is associtive - Nil is an identity of ++
Examples:
` (1, 2, 3, Nil) ++ (8, 9, Nil) = (1, 2, 3, 8, 9, Nil) (x ++ y) ++ z = x ++ (y ++ z) # associtive Nil ++ x = x # left identity x ++ Nil = x # right identity `Parameters:
l: List a, r: List aReturn Type:
List a
- def prepend (item: a) (list: List a): List a¶
Add item to the start of list. This is efficient no matter how large the list. Consider using ‘,’ directly as it is more idiomatic.
Examples:
` prepend 9 (seq 3) = 9, 0, 1, 2, Nil prepend 8 Nil = 8, Nil `Parameters:
item: a, list: List aReturn Type:
List a
- def append (item: a) (list: List a): List a¶
Add item to the end of list.
NOTE: This function must recreate the entire list to add the item. If you add 1000 items to an empty list, this costs 1000*1000/2 steps. Therefore, if you need to add more than one item to the end of a list, you should consider prepending them to an empty list and then appending that list in reverse to the list you want to enlarge.
Examples: ``` append 9 (seq 3) = 0, 1, 2, 9, Nil append 9 Nil = 9, Nil
append 8 (append 7 (append 6 (seq 6))) = 0, 1, 2, 3, 4, 5, 6, 7, 8, Nil = (seq 6) ++ reverse (8, 7, 6, Nil) # <== potentially much faster ```
Parameters:
item: a, list: List aReturn Type:
List a
- def splitAt (index: Integer) (listToDivide: List a): Pair (List a) (List a)¶
Given an index, cut a List into elements before and after the index
Examples:
` splitAt 4 (seq 8) = Pair (0, 1, 2, 3, Nil) (4, 5, 6, 7, Nil) splitAt 0 (seq 8) = Pair Nil (0, 1, 2, 3, 4, 5, 6, 7, Nil) splitAt 8 (seq 8) = Pair (0, 1, 2, 3, 4, 5, 6, 7, Nil) Nil splitAt 1000 (seq 3) = Pair (seq 3) Nil `Parameters:
index: Integer, listToDivide: List aReturn Type:
Pair (List a) (List a)
- def take (length: Integer) (l: List a): List a¶
Keep only the first length elements
Examples:
` take 2 (seq 100) = 0, 1, Nil take 0 (seq 100) = Nil take 2 Nil = Nil take (-2) (seq 100) = Nil `Parameters:
length: Integer, l: List aReturn Type:
List a
- def drop (num: Integer) (l: List a): List a¶
Discard the first num elements
Examples:
` drop 4 (seq 6) = 4, 5, Nil drop 6 (seq 6) = Nil drop 0 (seq 3) = 0, 1, 2, Nil drop (-2) (seq 3) = 0, 1, 2, Nil `Parameters:
num: Integer, l: List aReturn Type:
List a
- def at (i: Integer) (l: List a): Option a¶
Extract the i-th element if it exists or else None
Examples:
` at 4 (seq 8) = Some 4 at 4 (seq 4) = None at (-1) (seq 4) = None `Parameters:
i: Integer, l: List aReturn Type:
Option a
- def splitUntil (stopFn: a¶
Cut the List at the point f is first True Once stopFn returns True, stopFn is not evaulated on further elements. This means that stopFn is applied to the List mostly sequentially. If more parallelism is desired, use ‘map f | find (_)’ and splitAt.
Examples:
` splitUntil (_>=4) (seq 8) = Pair (0, 1, 2, 3, Nil) (4, 5, 6, 7, Nil) splitUntil (_>=0) (seq 8) = Pair Nil (0, 1, 2, 3, 4, 5, 6, 7, Nil) splitUntil (_>=8) (seq 8) = Pair (0, 1, 2, 3, 4, 5, 6, 7, Nil) Nil `Parameters:
stopFn: a, Boolean, l: List aReturn Type:
Pair (List a) (List a)
- def takeUntil (f: a¶
Take the longest prefix of a list where f is False Once f returns True, f is not evaulated on further elements. This means that f is applied to the List mostly sequentially. If more parallelism is desired, use ‘map f | find (_)’ and take.
Examples:
` takeUntil (_>=4) (seq 8) = 0, 1, 2, 3, Nil takeUntil (_>=0) (seq 8) = Nil takeUntil (_>=8) (seq 8) = 0, 1, 2, 3, 4, 5, 6, 7, Nil `Parameters:
f: a, Boolean, List aReturn Type:
List a
- def dropUntil (f: a¶
Discard elements from the list until ‘f’ returns True Once f returns True, f is not evaulated on further elements. This means that f is applied to the List mostly sequentially. If more parallelism is desired, use ‘map f | find (_)’ and drop.
Examples:
` dropUntil (_>=4) (seq 8) = 4, 5, 6, 7, Nil dropUntil (_>=0) (seq 8) = 0, 1, 2, 3, 4, 5, 6, 7, Nil dropUntil (_>=8) (seq 8) = Nil `Parameters:
f: a, Boolean, l: List aReturn Type:
List a
- def find (f: a¶
Find the location of the first element accepted by f Returns: Pair value index, such that value is at index Once f returns True, f is not evaulated on further elements. This means that f is applied to the List mostly sequentially. If more parallelism is desired, use ‘map f | find (_)’.
Examples:
` def l = (85, 4, 10, 3, Nil) find (_==10) l = Some (Pair 10 2) find (_>9) l = Some (Pair 85 0) find (_<3) l = None `Parameters:
f: a, Boolean, List aReturn Type:
Option (Pair a Integer)
- def exists (f: a¶
Does f return True for any element in the list? Once f returns True, f is not evaulated on further elements. This means that f is applied to the List mostly sequentially. If more parallelism is desired, use ‘map f | exists (_)’.
Examples:
` exists (_==11) (seq 20) = True exists (_>100) (seq 20) = False exists (_<100) (seq 20) = True exists (\_ True) Nil = False exists (\_ True) (prepend x xs) = True exists p xs = ! (forall (! p _) xs) `Parameters:
f: a, Boolean, List aReturn Type:
Boolean
- def forall (f: a¶
Does f return True for all elements in the list? Once f returns False, f is not evaulated on further elements. This means that f is applied to the List mostly sequentially. If more parallelism is desired, use ‘map f | forall (_)’.
Examples:
` forall (_==11) (seq 20) = False forall (_>100) (seq 20) = False forall (_<100) (seq 20) = True forall (\_ False) Nil = True forall (\_ False) (prepend x xs) = False forall (\_ True) xs = True forall p xs = ! (exists (! p _) xs) `Parameters:
f: a, Boolean, List aReturn Type:
Boolean
- def splitBy (acceptFn: a¶
Partition one list into two Lists based on the output of acceptFn. Every element of list appears in exactly one of the output Lists. Two elements in an output List retain the order they had in list.
Parameters: - acceptFn: The Boolean function which categorizes each element - list: The List of elements to be categorized by True / False
Returns Pair true false, where: - true: List of elements from list for which acceptFn returned True - false: List of elements from list for which acceptFn returned False
Examples:
` def isEven x = x%2 == 0 splitBy isEven (0, 1, 3, 5, 6, Nil) = Pair (0, 6, Nil) (1, 3, 5, Nil) splitBy p xs = Pair (filter p xs) (filter (! p _) xs) `Parameters:
acceptFn: a, Boolean, list: List aReturn Type:
Pair (true: List a) (false: List a)
- def filter (f: a¶
Keep only those elements in the List where f evaluates to True
Examples:
` def isEven x = x%2 == 0 filter isEven (seq 10) = 0, 2, 4, 6, 8, Nil filter p Nil = Nil filter (\x True) xs = xs filter (\x False) xs = Nil filter p xs = getPairFirst (splitBy p xs) `Parameters:
f: a, Boolean, List aReturn Type:
List a
- def intercalate (inter: List a) (list: List (List a)): List a¶
Flatten a list of lists, adding the indicated values between every original list.
Examples:
` intercalate (0, Nil) ((1, 2, Nil), (3, Nil), (4, 5, Nil), Nil) = 1, 2, 0, 3, 0, 4, 5, Nil intercalate (0, Nil) Nil = Nil intercalate Nil (x, y, Nil) = x ++ y `Parameters:
inter: List a, list: List List aReturn Type:
List a
- def sortBy (cmpFn: a¶
Given a less-than comparison function, sort the list. Elements which compare as EQ retain their order in the output list.
Parameters: - cmpFn: The comparision function that defines the ordering - list: The list of elements to sort by cmpFn
Guarantees: - The output is a permutation of list - If 0 <= x < y < len list then cmpFn (at list x) (at list y) | isLT (ignoring None)
Example:
` sortBy (_<=>_) (6, 1, 4, 2, Nil) = 1, 2, 4, 6, Nil sortBy (_<=>_) Nil = Nil sortBy (_<=>_) (1, Nil) = (1, Nil) sortBy (\x\y icmp y x) (1, 2, 3, Nil) = reverse (sortBy icmp (1, 2, 3, Nil)) = 3, 2, 1, Nil `Parameters:
cmpFn: a, a, Order, l: List aReturn Type:
List a
- def distinctBy (cmpFn: a¶
Keep only the first occurrence of a value The order of non-duplicated elements is retained.
This runs in O(n*lg(n))
Example:
` distinctBy (_<=>_) (1, 2, 1, 3, 4, 3, Nil) = 1, 2, 3, 4, Nil distinctBy (_<=>_) Nil = Nil `Parameters:
cmpFn: a, a, Order, List aReturn Type:
List a
- def distinctRunBy (eqFn: a¶
Keep only the first occurrence in a run of equal values
Example:
` distinctRunBy (_==_) (1, 1, 2, 1, 3, 3, Nil) = 1, 2, 1, 3, Nil distinctRunBy (_==_) Nil = Nil distinctBy (_<=>_) | sortBy (_<_) = sortBy (_<_) | distinctRunBy (_==_) `Parameters:
eqFn: a, a, Boolean, l: List aReturn Type:
List a
- def cmp (cmpFn: a¶
Compare two lists using an Order comparator * EQ is the result if the lists are exactly equal. * LT is the result if the first elements that f does not return EQ for returns LT or if l is a prefix of r. * GT is the result if the first elements that f does not return EQ for returns GT or if r is a prefix of l.
This is also called a lexicographical ordering.
Parameters: - cmpFn: The function by which elements of l and r are compared - l: The left list - r: The right list
Example:
` cmp (_<=>_) (seq 5) (seq 5) = EQ cmp (_<=>_) (seq 5) (seq 4) = GT cmp (_<=>_) (0, Nil) (1, Nil) = LT `Parameters:
cmpFn: a, b, Order, l: List a, r: List bReturn Type:
Order
- def tab (f: Integer¶
Create a list of specified size by calling f on the index to generate.
Example:
` tab (_+100) 5 = 100, 101, 102, 103, 104, Nil tab f 0 = Nil tab f 3 = f 0, f 1, f 2, Nil `Parameters:
f: Integer, a, n: IntegerReturn Type:
List a
- def replicate (n: Integer) (element: a): List a¶
Create a list identical elements, with a given length.
Example:
` replicate 5 "a" = "a", "a", "a", "a", "a", Nil replicate (-1) "a" = Nil replicate 0 "a" = Nil `Parameters:
n: Integer, element: aReturn Type:
List a
- def zip (a: List a) (b: List b): List (Pair a b)¶
Take two Lists and turn them into a List of Pairs The shortest length of the two input lists sets the output length.
Example:
` zip (4, 7, Nil) ("a", "b", Nil) = (Pair 4 "a", Pair 7 "b", Nil) zip (4, 7, Nil) ("a", "b", "c", Nil) = (Pair 4 "a", Pair 7 "b", Nil) zip Nil x = Nil zip x Nil = Nil `Parameters:
a: List a, b: List bReturn Type:
List (Pair a b)
- def unzip (list: List (Pair a b)): Pair (List a) (List b)¶
Turn a List of Pairs into a Pair of Lists
Guarantees: - Both output lists will be the same length - if (len x) == (len y) then unzip (zip x y) = Pair x y - ((Pair x y) zip x y) (unzip l) = l
Example:
` unzip (Pair 4 "a", Pair 7 "b", Nil) = Pair (4, 7, Nil) ("a", "b", Nil) unzip Nil = Pair Nil Nil `Parameters:
list: List Pair a bReturn Type:
Pair (List a) (List b)
- def groupBy (cmpFn: a¶
Group a list by some comparison function. Elements which compare equal are placed into the same bucket. Buckets preserve the order of the original list. The buckets appear in the sort-order specified by cmpFn.
Examples: ``` def cmp a b = a%3 < b%3 def list = seq 10 groupBy cmp list = (0,3,6,9,Nil), (1,4,7,Nil), (2,5,8,Nil), Nil
def cmp a b = a/3 > b/3 def list = seq 10 groupBy cmp list = (9,Nil), (6,7,8,Nil), (3,4,5,Nil), (0,1,2,Nil), Nil ```
Parameters:
cmpFn: a, a, Order, list: List aReturn Type:
List (List a)
- def intersect (cmpFn: a¶
Returns a list of items where each item was a member of the two parameter lists. The returned list will not be the same order as the parameters.
Guarantees: - Output list length will be <= the length of the smaller input list - All items in output list will be present in both input lists - Performance is considered and exceeds the naive N^2 algorithm
Examples:
` intersect icmp (seq 3) (seq 4) = 0, 1, 2, Nil intersect icmp (seq 3) (seq 3) = 0, 1, 2, Nil intersect icmp (seq 3) (4, 2, 0, Nil) = 0, 2, Nil intersect scmp ("", "bar", "bat", Nil) ("", "foo", "bat", Nil) = "", "bat", Nil `Parameters:
cmpFn: a, a, Order, left: List a, right: List aReturn Type:
List a
- def subset (cmpFn: a¶
Returns a Boolean determining if all items in left are also item in right.
Guarantees: - True is returned only when all items of left are present in right - Performance is considered and exceeds the naive N^2 algorithm
Examples: subset icmp (seq 3) (seq 4) = True subset icmp (seq 3) (seq 3) = True subset icmp (seq 3) (seq 2) = False subset icmp (seq 3) (4, 2, 0, Nil) = False subset icmp Nil Nil = True subset icmp Nil (seq 1) = True subset icmp (seq 1) Nil = False subset scmp (“”, Nil) (“”, “foo”, “bar”, Nil) = True subset scmp (“”, “bat”, Nil) (“”, “foo”, “bar”, Nil) = False
Parameters:
cmpFn: a, a, Order, left: List a, right: List aReturn Type:
Boolean
- def subtract (cmpFn: a¶
Remove all items from the left list which occur in the right. The returned list will not be the same order as the parameters.
Guarantees: - Output list length will be <= the length of left - All items in output list will be present in left - No items in output list will be present in right - Performance is considered and exceeds the naive N^2 algorithm
Examples:
` subtract icmp (seq 4) (seq 3) = 3, Nil subtract icmp (seq 3) (seq 3) = Nil subtract icmp (seq 3) (2, Nil) = 0, 1, Nil subtract scmp ("", "bar", "bat", Nil) ("", "foo", "bat", Nil) = "bar", Nil `Parameters:
cmpFn: a, a, Order, left: List a, right: List aReturn Type:
List a
regexp.wake¶
- def quote (str: String): RegExp¶
Create RegExp that only matches str, by escaping special characters. quote “a.b” = a.b quote “hello[world]” = hello[world]
Parameters:
str: StringReturn Type:
RegExp
- def regExpCat (l: List RegExp): RegExp¶
Concatenate a list of regular expressions. The resulting regular expression must match the elements sequentially. For simple expressions, use built-in RegExp interpolation ${x}${y}${z}. regExpCast (abc, def, Nil) = abcdef
Parameters:
l: List RegExpReturn Type:
RegExp
- def stringToRegExp (str: String): Result RegExp Error¶
Convert a String into a Regular expression. If the string is an illegal RegExp, returns Fail. stringToRegExp “abc” = Pass abc stringToRegExp “a(” = Fail (Error “missing ): a(” _)
Parameters:
str: StringReturn Type:
Result RegExp Error
- def globToRegExp (glob: String): RegExp¶
Convert a String glob-style expression into a RegExp. A glob expression has: ? matches any single non-/ character * matches 0 or more non-/ characters /** matches any path after the / **/ matches any path leading up to the / [ab] matches either a or b * matches a *
Parameters:
glob: StringReturn Type:
RegExp
- def regExpToString (regExp: RegExp): String¶
Convert a regular expression into a String. stringToRegExp (regExpToString x) = Pass x regExpToString abc = “abc” regExpToString .* = “.*”
Parameters:
regExp: RegExpReturn Type:
String
- def matches (testRegExp: RegExp) (str: String): Boolean¶
Test if a regular expression matches an entire String. matches a* “ba” = False matches a* “aa” = True
Parameters:
testRegExp: RegExp, str: StringReturn Type:
Boolean
- def extract (parensRegexp: RegExp) (str: String): List String¶
Extract fields out of a String using a parenthetical regular expression. extract (.*)-(.*) “hello-world-hello” = (“hello”, “world-hello”, Nil) extract (.*)-(.*) “helloworldhello” = Nil
Parameters:
parensRegexp: RegExp, str: StringReturn Type:
List String
- def replace (locatorRegExp: RegExp) (replacement: String) (str: String): String¶
Replace all occurances of locatorRegExp in str with replacement. replace : ” ” “a:b:c” = “a b c”
Parameters:
locatorRegExp: RegExp, replacement: String, str: StringReturn Type:
String
- def tokenize (seperatorRegExp: RegExp) (str: String): List String¶
Remove all occurances of seperatorRegExp from str, creating a List of String fragments. tokenize : “hello:there:friend” = (“hello”, “there”, “friend”, Nil)
Parameters:
seperatorRegExp: RegExp, str: StringReturn Type:
List String
syntax.wake¶
- def (argument: a).(memberFn: a¶
Flip function and argument order. fn obj.getXYZ = fn (getXYZ obj)
Parameters:
argument: a, memberFn: a, bReturn Type:
b
- def (argument: a) | (pipeFn: a¶
Flip function and argument order. seq 10 | map str | catWith ” ” = catWith ” ” (map str (seq 10))
Parameters:
argument: a, pipeFn: a, bReturn Type:
b
- def (dollarFn: a¶
Avoid ()s without changing order. catWith ” ” $ map str $ seq 10 = catWith ” ” (map str (seq 10))
Parameters:
dollarFn: a, b, argument: aReturn Type:
b
- def (f: b¶
The ring operator is used to denote the composition of functions. (f ∘ g) x = f (g x)
Parameters:
f: a, b, g: c, a, x: cReturn Type:
b
- def flip (f: a¶
Allows flipping the parameters of a function. icmp.flip 4 5 = GT icmp.flip 5 4 = LT
Parameters:
f: a, b, c, x: b, y: aReturn Type:
c
- def wait (f: a¶
Wait for ‘x’ to be computed before invoking (f x). If ‘x’ is a list, f will run once ‘x’ can be distinguished between Nil and (_, _). Normally, ‘f x’ may invoke ‘f’ before even this basic fact is known. You generally only need ‘wait’ when interfacing with other wake primitives. Therefore, ask a wake expert before you resort to using this function. The correct way to sequence events is by consuming the results of prior events in later events. A ‘match x’ expression on list ‘x’ with different case results also acts like ‘wait’.
Parameters:
f: a, b, x: aReturn Type:
b
- def unreachable (reason: String): a¶
Tell the wake interpreter that it is impossible to reach this expression. The behaviour of an execution which DOES reach unreachable is undefined.
### FUNCTION IS NOT INTENDED TO STOP A BUILD! ### ### To report Errors use a Result ###
Parameters: - reason: A String describing why this code is impossible to reach
An example of a legitimate use of unreachable:
` def hasUniqueMinimum list = match (sortBy (_<_) list) Nil = False x, Nil = True x, y, _ = match (x <=> y) LT = True EQ = False GT = unreachable "Sorted list {format list} is not sorted" `The optimizer can legally remove unreachables (they are by definition unreachable). Furthermore, the optimizer can even eliminate code that coexists with a unreachable. Thus, here is an example of why you should never use unreachable for error reporting:
` def myFun x = def _ = unreachable "stop the program" 42 + x `When this funciton is called from the command-line, the behaviour is undefined:
` $ wake --no-optimize -x 'myFun 33' PANIC: stop the program $ wake -x 'myFun 33' 75 $ future-version-of-wake -x 'myFun 33' 200 `Parameters:
reason: StringReturn Type:
a
- def panic (reason: String): a¶
Like unreachable but with a different error message May not be optimized away
Parameters:
reason: StringReturn Type:
a
- def identity (x: a): a¶
identity: Returns the input unmodified
This function is useful when a adpater function is require but no adpation is needed.
Parameters:
x: aReturn Type:
a
print.wake¶
- def format (anyType: a): String¶
format: render any type into a printable String
format 44 = “44” format “Hello” = “"Hello"” format “n” = “"\n"” format (seq 4)’ = “0, 1, 2, 3, Nil” format pi = “3.1415926535897931” format (Pass 33) = “Pass 33” format True = “True” format (_) = “<source-file.wake:line:column>”
Parameters:
anyType: aReturn Type:
String
- def getLogLevelName (LogLevel name): String¶
getLogLevelName: return the name of the LogLevel
Parameters:
LogLevelReturn Type:
String
- def tap (consumerFn: a¶
tap: inject a diagnostic into a pipeline Oftern used in conjunction with println and/or format.
def foo = “123123” | tap (println “DEBUG; I SAW: {format _}”) | int | getOrElse 0
Parameters:
consumerFn: a, b, value: aReturn Type:
a
- def printlnLevel (LogLevel name) (message: String): Unit¶
printlnLevel: print a String with a newline on the given LogLevel.
# Produce a yellow hello on stdout unless run with -q def Unit = printlnLevel logWarning “hello”
Parameters:
LogLevel, StringReturn Type:
Unit
- def breadcrumb (x: String): Unit¶
breadcrumb: Leaves an out of band message in the wake internal log
This should primarily be used by core/standard libraries over normal user code. However it can be useful for tracing or debugging wake code out of band. The contents of the log may only be inspected outside of wake and thus any breakcrumbs are “blackholed” from the perspective of wakelang.
# Emit a structured message to ‘wake.log’ def _ = breadcrumb “encountered failing event”
Parameters:
x: StringReturn Type:
Unit