{"entries":[{"anchor":"type-ordering","kind":"type","line":11,"name":"Ordering","qualifiedName":"Ordering","signatures":[],"summary":"The result of `Comparable.compare`. Declared here rather than only inside the interpreter so that `Ordering`, `Less`, `Equal` and `Greater` reach the semantic layer the same way every other stdlib type does — through the collected interfaces — instead of existing solely as native environment bindings the type checker and name resolver cannot see.","types":[],"urlPath":"algebra"},{"anchor":"trait-comparable","kind":"trait","line":13,"name":"Comparable","qualifiedName":"Comparable","signatures":["compare : This -> Ordering"],"summary":"","types":["(This) -> Ordering"],"urlPath":"algebra"},{"anchor":"comparable-compare","kind":"function","line":16,"name":"compare","qualifiedName":"Comparable.compare","signatures":["compare : This -> Ordering"],"summary":"A total order: `compare` answers Less, Equal or Greater. `==` stays independent — a type may be Equatable without being ordered.","types":["(This) -> Ordering"],"urlPath":"algebra"},{"anchor":"make-number","kind":"make","line":22,"name":"Number","qualifiedName":"Number","signatures":["compare(other: Number) -> Ordering"],"summary":"Number carries the implementation, so Integer and Float both inherit it rather than repeating the same three comparisons. Mixed receivers work because `<` and `>` promote across the two (`1.compare(1.0)` is Equal).","types":["Number","Ordering"],"urlPath":"algebra"},{"anchor":"number-compare","kind":"function","line":23,"name":"compare","qualifiedName":"Number.compare","signatures":["compare(other: Number) -> Ordering"],"summary":"","types":["Number","Ordering"],"urlPath":"algebra"},{"anchor":"trait-monoid","kind":"trait","line":30,"name":"Monoid","qualifiedName":"Monoid","signatures":["identity : This","combine : This -> This","repeat(n: Integer) -> This"],"summary":"","types":["This","(This) -> This","Integer"],"urlPath":"algebra"},{"anchor":"monoid-identity","kind":"function","line":32,"name":"identity","qualifiedName":"Monoid.identity","signatures":["identity : This"],"summary":"`combine` must be associative and `identity` neutral on both sides.","types":["This"],"urlPath":"algebra"},{"anchor":"monoid-combine","kind":"function","line":33,"name":"combine","qualifiedName":"Monoid.combine","signatures":["combine : This -> This"],"summary":"","types":["(This) -> This"],"urlPath":"algebra"},{"anchor":"monoid-repeat","kind":"function","line":37,"name":"repeat","qualifiedName":"Monoid.repeat","signatures":["repeat(n: Integer) -> This"],"summary":"Combines this value with itself `n` times. Repeating zero times returns the monoid identity; a negative repetition count is invalid.","types":["Integer","This"],"urlPath":"algebra"},{"anchor":"trait-group","kind":"trait","line":45,"name":"Group","qualifiedName":"Group","signatures":["identity : This","combine : This -> This","inverse : This"],"summary":"","types":["This","(This) -> This"],"urlPath":"algebra"},{"anchor":"group-identity","kind":"function","line":47,"name":"identity","qualifiedName":"Group.identity","signatures":["identity : This"],"summary":"Combining a value with its inverse must produce `identity`.","types":["This"],"urlPath":"algebra"},{"anchor":"group-combine","kind":"function","line":48,"name":"combine","qualifiedName":"Group.combine","signatures":["combine : This -> This"],"summary":"","types":["(This) -> This"],"urlPath":"algebra"},{"anchor":"group-inverse","kind":"function","line":49,"name":"inverse","qualifiedName":"Group.inverse","signatures":["inverse : This"],"summary":"","types":["This"],"urlPath":"algebra"},{"anchor":"make-integer","kind":"make","line":52,"name":"Integer","qualifiedName":"Integer","signatures":["combine(other: This) -> This","inverse : This"],"summary":"","types":["This"],"urlPath":"algebra"},{"anchor":"integer-identity","kind":"function","line":53,"name":"identity","qualifiedName":"Integer.identity","signatures":[],"summary":"","types":[],"urlPath":"algebra"},{"anchor":"integer-combine","kind":"function","line":54,"name":"combine","qualifiedName":"Integer.combine","signatures":["combine(other: This) -> This"],"summary":"","types":["This"],"urlPath":"algebra"},{"anchor":"integer-inverse","kind":"function","line":55,"name":"inverse","qualifiedName":"Integer.inverse","signatures":["inverse : This"],"summary":"","types":[],"urlPath":"algebra"},{"anchor":"make-string","kind":"make","line":58,"name":"String","qualifiedName":"String","signatures":["combine(other: This) -> This"],"summary":"","types":["This"],"urlPath":"algebra"},{"anchor":"string-identity","kind":"function","line":59,"name":"identity","qualifiedName":"String.identity","signatures":[],"summary":"","types":[],"urlPath":"algebra"},{"anchor":"string-combine","kind":"function","line":60,"name":"combine","qualifiedName":"String.combine","signatures":["combine(other: This) -> This"],"summary":"","types":["This"],"urlPath":"algebra"},{"anchor":"make-list","kind":"make","line":63,"name":"[A]","qualifiedName":"[A]","signatures":["combine(other: This) -> This"],"summary":"","types":["This"],"urlPath":"algebra"},{"anchor":"list-identity","kind":"function","line":64,"name":"identity","qualifiedName":"List.identity","signatures":[],"summary":"","types":[],"urlPath":"algebra"},{"anchor":"list-combine","kind":"function","line":65,"name":"combine","qualifiedName":"List.combine","signatures":["combine(other: This) -> This"],"summary":"","types":["This"],"urlPath":"algebra"},{"anchor":"make-ordering","kind":"make","line":75,"name":"Ordering","qualifiedName":"Ordering","signatures":["combine(_, other: Ordering) -> Ordering","reverse : Ordering","thenBy : Block<Ordering> -> Ordering"],"summary":"Ordering is a Monoid under \"first decision wins\", with Equal as identity. That is what makes multi-key comparison compose instead of nesting ifs:\n\n```kex\na.name.compare(b.name).combine(a.age.compare(b.age))\n```\n\n`combine` evaluates its argument eagerly, so the later comparison runs even when the earlier one already decided. Use `thenBy` when that matters.","types":["Ordering","(Block<Ordering>) -> Ordering"],"urlPath":"algebra"},{"anchor":"ordering-identity","kind":"function","line":76,"name":"identity","qualifiedName":"Ordering.identity","signatures":[],"summary":"","types":[],"urlPath":"algebra"},{"anchor":"ordering-combine","kind":"function","line":78,"name":"combine","qualifiedName":"Ordering.combine","signatures":["combine(_, other: Ordering) -> Ordering"],"summary":"","types":["Ordering"],"urlPath":"algebra"},{"anchor":"ordering-reverse","kind":"function","line":83,"name":"reverse","qualifiedName":"Ordering.reverse","signatures":["reverse : Ordering"],"summary":"Swaps Less and Greater and fixes Equal — descending order.","types":["Ordering"],"urlPath":"algebra"},{"anchor":"ordering-thenby","kind":"function","line":92,"name":"thenBy","qualifiedName":"Ordering.thenBy","signatures":["thenBy : Block<Ordering> -> Ordering"],"summary":"Short-circuiting `combine`: the tie-breaker block runs only when this comparison is Equal, so it costs nothing once the order is decided.\n\n```kex\na.name.compare(b.name).thenBy { a.age.compare(b.age) }\n```","types":["(Block<Ordering>) -> Ordering","Ordering"],"urlPath":"algebra"},{"anchor":"module-bits","kind":"module","line":7,"name":"Bits","qualifiedName":"Bits","signatures":["and(a: Integer, b: Integer) -> Integer","or(a: Integer, b: Integer) -> Integer","xor(a: Integer, b: Integer) -> Integer","not(a: Integer) -> Integer","shiftLeft(n: Integer, by: Integer) -> Integer","shiftRight(n: Integer, by: Integer) -> Integer","test?(n: Integer, index: Integer) -> Bool","set(n: Integer, index: Integer) -> Integer","clear(n: Integer, index: Integer) -> Integer","toggle(n: Integer, index: Integer) -> Integer","count(n: Integer) -> Integer","width(n: Integer) -> Integer"],"summary":"The `Bits` module provides bitwise operations on `Integer`.\n\nIntegers are arbitrary precision, and a negative one behaves as if it were written in infinite-precision two's complement — so `Bits.not(0)` is `-1` and `Bits.and(-1, 255)` is `255`, with no word size to overflow. Shifts and bit indices count from bit 0 (the least significant bit).","types":["Integer","Bool"],"urlPath":"bits"},{"anchor":"function-bits-and","kind":"function","line":17,"name":"and","qualifiedName":"Bits.and","signatures":["and(a: Integer, b: Integer) -> Integer"],"summary":"Bitwise AND of `a` and `b`.","types":["Integer"],"urlPath":"bits"},{"anchor":"function-bits-or","kind":"function","line":28,"name":"or","qualifiedName":"Bits.or","signatures":["or(a: Integer, b: Integer) -> Integer"],"summary":"Bitwise OR of `a` and `b`.","types":["Integer"],"urlPath":"bits"},{"anchor":"function-bits-xor","kind":"function","line":39,"name":"xor","qualifiedName":"Bits.xor","signatures":["xor(a: Integer, b: Integer) -> Integer"],"summary":"Bitwise exclusive OR of `a` and `b`.","types":["Integer"],"urlPath":"bits"},{"anchor":"function-bits-not","kind":"function","line":51,"name":"not","qualifiedName":"Bits.not","signatures":["not(a: Integer) -> Integer"],"summary":"Bitwise complement of `a`. Every integer is signed and unbounded, so this is always +-(a + 1)+ rather than a width-dependent mask.","types":["Integer"],"urlPath":"bits"},{"anchor":"function-bits-shiftleft","kind":"function","line":62,"name":"shiftLeft","qualifiedName":"Bits.shiftLeft","signatures":["shiftLeft(n: Integer, by: Integer) -> Integer"],"summary":"Shifts `n` left by `by` bits. Raises if `by` is negative.","types":["Integer"],"urlPath":"bits"},{"anchor":"function-bits-shiftright","kind":"function","line":75,"name":"shiftRight","qualifiedName":"Bits.shiftRight","signatures":["shiftRight(n: Integer, by: Integer) -> Integer"],"summary":"Shifts `n` right by `by` bits, propagating the sign — the result of shifting a negative number stays negative. Raises if `by` is negative.","types":["Integer"],"urlPath":"bits"},{"anchor":"function-bits-test?","kind":"function","line":87,"name":"test?","qualifiedName":"Bits.test?","signatures":["test?(n: Integer, index: Integer) -> Bool"],"summary":"True when the bit at `index` of `n` is set. Raises if `index` is negative.","types":["Integer","Bool"],"urlPath":"bits"},{"anchor":"function-bits-set","kind":"function","line":98,"name":"set","qualifiedName":"Bits.set","signatures":["set(n: Integer, index: Integer) -> Integer"],"summary":"`n` with the bit at `index` set. Raises if `index` is negative.","types":["Integer"],"urlPath":"bits"},{"anchor":"function-bits-clear","kind":"function","line":109,"name":"clear","qualifiedName":"Bits.clear","signatures":["clear(n: Integer, index: Integer) -> Integer"],"summary":"`n` with the bit at `index` cleared. Raises if `index` is negative.","types":["Integer"],"urlPath":"bits"},{"anchor":"function-bits-toggle","kind":"function","line":120,"name":"toggle","qualifiedName":"Bits.toggle","signatures":["toggle(n: Integer, index: Integer) -> Integer"],"summary":"`n` with the bit at `index` flipped. Raises if `index` is negative.","types":["Integer"],"urlPath":"bits"},{"anchor":"function-bits-count","kind":"function","line":131,"name":"count","qualifiedName":"Bits.count","signatures":["count(n: Integer) -> Integer"],"summary":"Number of set bits in `n` (population count). A negative value has infinitely many under two's complement, so this raises for one.","types":["Integer"],"urlPath":"bits"},{"anchor":"function-bits-width","kind":"function","line":144,"name":"width","qualifiedName":"Bits.width","signatures":["width(n: Integer) -> Integer"],"summary":"Number of bits needed to represent `n`, i.e. the position of its highest set bit plus one. Zero needs none. Raises for a negative value.","types":["Integer"],"urlPath":"bits"},{"anchor":"trait-blankable","kind":"trait","line":5,"name":"Blankable","qualifiedName":"Blankable","signatures":["blank? : Bool"],"summary":"","types":["Bool"],"urlPath":"blankable"},{"anchor":"blankable-blank?","kind":"function","line":6,"name":"blank?","qualifiedName":"Blankable.blank?","signatures":["blank? : Bool"],"summary":"","types":["Bool"],"urlPath":"blankable"},{"anchor":"make-bool","kind":"make","line":10,"name":"Bool","qualifiedName":"Bool","signatures":["blank? : Bool"],"summary":"","types":[],"urlPath":"blankable"},{"anchor":"bool-blank?","kind":"function","line":11,"name":"blank?","qualifiedName":"Bool.blank?","signatures":["blank? : Bool"],"summary":"","types":[],"urlPath":"blankable"},{"anchor":"make-integer","kind":"make","line":15,"name":"Integer","qualifiedName":"Integer","signatures":["blank? : Bool"],"summary":"","types":["Bool"],"urlPath":"blankable"},{"anchor":"integer-blank?","kind":"function","line":16,"name":"blank?","qualifiedName":"Integer.blank?","signatures":["blank? : Bool"],"summary":"","types":["Bool"],"urlPath":"blankable"},{"anchor":"make-float","kind":"make","line":20,"name":"Float","qualifiedName":"Float","signatures":["blank? : Bool"],"summary":"","types":["Bool"],"urlPath":"blankable"},{"anchor":"float-blank?","kind":"function","line":21,"name":"blank?","qualifiedName":"Float.blank?","signatures":["blank? : Bool"],"summary":"","types":["Bool"],"urlPath":"blankable"},{"anchor":"make-string","kind":"make","line":25,"name":"String","qualifiedName":"String","signatures":["blank? : Bool"],"summary":"","types":[],"urlPath":"blankable"},{"anchor":"string-blank?","kind":"function","line":26,"name":"blank?","qualifiedName":"String.blank?","signatures":["blank? : Bool"],"summary":"","types":[],"urlPath":"blankable"},{"anchor":"make-optional","kind":"make","line":30,"name":"Optional<X>","qualifiedName":"Optional<X>","signatures":["blank? : Bool"],"summary":"","types":["Bool"],"urlPath":"blankable"},{"anchor":"optional-blank?","kind":"function","line":31,"name":"blank?","qualifiedName":"Optional.blank?","signatures":["blank? : Bool"],"summary":"","types":["Bool"],"urlPath":"blankable"},{"anchor":"make-list","kind":"make","line":36,"name":"[X]","qualifiedName":"[X]","signatures":["blank? : Bool"],"summary":"","types":["Bool"],"urlPath":"blankable"},{"anchor":"list-blank?","kind":"function","line":37,"name":"blank?","qualifiedName":"List.blank?","signatures":["blank? : Bool"],"summary":"","types":["Bool"],"urlPath":"blankable"},{"anchor":"module-console","kind":"module","line":3,"name":"Console","qualifiedName":"Console","signatures":["colorize(text: String, color: String) -> String"],"summary":"ANSI terminal styling. Color constants become empty strings when Kex is started with --no-colors, so callers can compose them without branching.","types":["","String","Bool"],"urlPath":"console"},{"anchor":"constant-console-reset","kind":"constant","line":4,"name":"RESET","qualifiedName":"Console.RESET","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-bold","kind":"constant","line":5,"name":"BOLD","qualifiedName":"Console.BOLD","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-dim","kind":"constant","line":6,"name":"DIM","qualifiedName":"Console.DIM","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-italic","kind":"constant","line":7,"name":"ITALIC","qualifiedName":"Console.ITALIC","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-underline","kind":"constant","line":8,"name":"UNDERLINE","qualifiedName":"Console.UNDERLINE","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-blink","kind":"constant","line":9,"name":"BLINK","qualifiedName":"Console.BLINK","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-reverse","kind":"constant","line":10,"name":"REVERSE","qualifiedName":"Console.REVERSE","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-hidden","kind":"constant","line":11,"name":"HIDDEN","qualifiedName":"Console.HIDDEN","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-strikethrough","kind":"constant","line":12,"name":"STRIKETHROUGH","qualifiedName":"Console.STRIKETHROUGH","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-red","kind":"constant","line":13,"name":"RED","qualifiedName":"Console.RED","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-green","kind":"constant","line":14,"name":"GREEN","qualifiedName":"Console.GREEN","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-yellow","kind":"constant","line":15,"name":"YELLOW","qualifiedName":"Console.YELLOW","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-blue","kind":"constant","line":16,"name":"BLUE","qualifiedName":"Console.BLUE","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-magenta","kind":"constant","line":17,"name":"MAGENTA","qualifiedName":"Console.MAGENTA","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-cyan","kind":"constant","line":18,"name":"CYAN","qualifiedName":"Console.CYAN","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-white","kind":"constant","line":19,"name":"WHITE","qualifiedName":"Console.WHITE","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-gray","kind":"constant","line":20,"name":"GRAY","qualifiedName":"Console.GRAY","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"constant-console-purple","kind":"constant","line":21,"name":"PURPLE","qualifiedName":"Console.PURPLE","signatures":[],"summary":"","types":[""],"urlPath":"console"},{"anchor":"function-console-colorize","kind":"function","line":24,"name":"colorize","qualifiedName":"Console.colorize","signatures":["colorize(text: String, color: String) -> String"],"summary":"Wrap `text` in an ANSI style and reset attributes afterwards.","types":["String"],"urlPath":"console"},{"anchor":"constant-console-enabled?","kind":"constant","line":28,"name":"enabled?","qualifiedName":"Console.enabled?","signatures":[],"summary":"Whether terminal styling is enabled for this process.","types":["Bool"],"urlPath":"console"},{"anchor":"module-digest","kind":"module","line":3,"name":"Digest","qualifiedName":"Digest","signatures":["sha256(content: String) -> String","fileSha256(path: String) -> String?"],"summary":"Cryptographic content digests. Hex strings are used at the public boundary so Kex programs never need to handle backend-specific binary values.","types":["String","String?"],"urlPath":"digest"},{"anchor":"function-digest-sha256","kind":"function","line":4,"name":"sha256","qualifiedName":"Digest.sha256","signatures":["sha256(content: String) -> String"],"summary":"","types":["String"],"urlPath":"digest"},{"anchor":"function-digest-filesha256","kind":"function","line":7,"name":"fileSha256","qualifiedName":"Digest.fileSha256","signatures":["fileSha256(path: String) -> String?"],"summary":"","types":["String","String?"],"urlPath":"digest"},{"anchor":"trait-errorable","kind":"trait","line":5,"name":"Errorable","qualifiedName":"Errorable","signatures":["message : String"],"summary":"Errorable — the trait for values that describe a failure. Implemented by error types that carry a human-readable message, so generic handlers can display or log any error uniformly (independent of the concrete error type's structured fields).","types":["String"],"urlPath":"errorable"},{"anchor":"errorable-message","kind":"function","line":6,"name":"message","qualifiedName":"Errorable.message","signatures":["message : String"],"summary":"","types":["String"],"urlPath":"errorable"},{"anchor":"record-parseerror","kind":"record","line":14,"name":"ParseError","qualifiedName":"ParseError","signatures":[],"summary":"ParseError — a typed parse failure. Carries the original `input`, the byte `position` where parsing stopped (and from which it can be continued), the successfully parsed `value` (if any prefix was consumed — typed `Any` so it works across Integer / Float / Number), a diagnostic `message`, and the remaining unconsumed suffix `rest` so the caller can resume parsing.","types":["String","Integer","Any"],"urlPath":"errorable"},{"anchor":"module-evaluator","kind":"module","line":5,"name":"Evaluator","qualifiedName":"Evaluator","signatures":["run(source: String) -> Result<Any, String>","run(source: String, opts: EvaluatorOptions) -> Result<Any, String>","runExpression(source: String) -> Result<Any, String>","runExpression(source: String, opts: EvaluatorOptions) -> Result<Any, String>"],"summary":"Sandboxed evaluation of Kex source code at runtime.\n\nCreates a fresh, isolated evaluator for each call — the caller's environment is never shared. Returns `Result<Any, String>`.","types":["String","Result<Any, String>","(EvaluatorOptions) -> Result<Any, String>","[Atom]","{String: {String: (Any) -> Any}}","Int"],"urlPath":"evaluator"},{"anchor":"function-evaluator-run","kind":"function","line":7,"name":"run","qualifiedName":"Evaluator.run","signatures":["run(source: String) -> Result<Any, String>","run(source: String, opts: EvaluatorOptions) -> Result<Any, String>"],"summary":"Evaluates a full Kex program string.","types":["String","Result<Any, String>","(EvaluatorOptions) -> Result<Any, String>"],"urlPath":"evaluator"},{"anchor":"function-evaluator-runexpression","kind":"function","line":13,"name":"runExpression","qualifiedName":"Evaluator.runExpression","signatures":["runExpression(source: String) -> Result<Any, String>","runExpression(source: String, opts: EvaluatorOptions) -> Result<Any, String>"],"summary":"Evaluates a single Kex expression.","types":["String","Result<Any, String>","(EvaluatorOptions) -> Result<Any, String>"],"urlPath":"evaluator"},{"anchor":"record-evaluator-evaluatoroptions","kind":"record","line":18,"name":"EvaluatorOptions","qualifiedName":"Evaluator.EvaluatorOptions","signatures":[],"summary":"","types":["[Atom]","{String: {String: (Any) -> Any}}","Int"],"urlPath":"evaluator"},{"anchor":"type-filehandle","kind":"type","line":1,"name":"FileHandle","qualifiedName":"FileHandle","signatures":[],"summary":"","types":[],"urlPath":"filehandle"},{"anchor":"make-filehandle-canread","kind":"make","line":3,"name":"FileHandle<CanRead, W>","qualifiedName":"FileHandle<CanRead, W>","signatures":["getLine : String?","get : String?","readLine : String?","read : String?","eof? : Bool","atEnd? : Bool","feed : Stream<String>?"],"summary":"","types":[],"urlPath":"filehandle"},{"anchor":"filehandle-canread-getline","kind":"function","line":5,"name":"getLine","qualifiedName":"FileHandle.getLine","signatures":["getLine : String?"],"summary":"Compatibility names matching IO-style handle operations.","types":[],"urlPath":"filehandle"},{"anchor":"filehandle-canread-get","kind":"function","line":8,"name":"get","qualifiedName":"FileHandle.get","signatures":["get : String?"],"summary":"","types":[],"urlPath":"filehandle"},{"anchor":"filehandle-canread-readline","kind":"function","line":11,"name":"readLine","qualifiedName":"FileHandle.readLine","signatures":["readLine : String?"],"summary":"","types":[],"urlPath":"filehandle"},{"anchor":"filehandle-canread-read","kind":"function","line":14,"name":"read","qualifiedName":"FileHandle.read","signatures":["read : String?"],"summary":"","types":[],"urlPath":"filehandle"},{"anchor":"filehandle-canread-eof?","kind":"function","line":17,"name":"eof?","qualifiedName":"FileHandle.eof?","signatures":["eof? : Bool"],"summary":"","types":[],"urlPath":"filehandle"},{"anchor":"filehandle-canread-atend?","kind":"function","line":20,"name":"atEnd?","qualifiedName":"FileHandle.atEnd?","signatures":["atEnd? : Bool"],"summary":"","types":[],"urlPath":"filehandle"},{"anchor":"filehandle-canread-feed","kind":"function","line":23,"name":"feed","qualifiedName":"FileHandle.feed","signatures":["feed : Stream<String>?"],"summary":"","types":[],"urlPath":"filehandle"},{"anchor":"make-filehandle-canwrite","kind":"make","line":27,"name":"FileHandle<R, CanWrite>","qualifiedName":"FileHandle<R, CanWrite>","signatures":["printLine(content: String) -> Bool","print(content: String) -> Bool","writeLine(content: String) -> Bool","write(content: String) -> Bool"],"summary":"","types":["String","Bool"],"urlPath":"filehandle"},{"anchor":"filehandle-canwrite-printline","kind":"function","line":28,"name":"printLine","qualifiedName":"FileHandle.printLine","signatures":["printLine(content: String) -> Bool"],"summary":"","types":["String","Bool"],"urlPath":"filehandle"},{"anchor":"filehandle-canwrite-print","kind":"function","line":31,"name":"print","qualifiedName":"FileHandle.print","signatures":["print(content: String) -> Bool"],"summary":"","types":["String","Bool"],"urlPath":"filehandle"},{"anchor":"filehandle-canwrite-writeline","kind":"function","line":34,"name":"writeLine","qualifiedName":"FileHandle.writeLine","signatures":["writeLine(content: String) -> Bool"],"summary":"","types":["String","Bool"],"urlPath":"filehandle"},{"anchor":"filehandle-canwrite-write","kind":"function","line":37,"name":"write","qualifiedName":"FileHandle.write","signatures":["write(content: String) -> Bool"],"summary":"","types":["String","Bool"],"urlPath":"filehandle"},{"anchor":"make-filehandle","kind":"make","line":41,"name":"FileHandle<R, W>","qualifiedName":"FileHandle<R, W>","signatures":["close : Void"],"summary":"","types":[],"urlPath":"filehandle"},{"anchor":"filehandle-close","kind":"function","line":42,"name":"close","qualifiedName":"FileHandle.close","signatures":["close : Void"],"summary":"","types":[],"urlPath":"filehandle"},{"anchor":"type-list","kind":"type","line":1,"name":"List","qualifiedName":"List","signatures":[],"summary":"","types":[],"urlPath":"list"},{"anchor":"make-list-number","kind":"make","line":3,"name":"[Number]","qualifiedName":"[Number]","signatures":["sum : Number","product : Number","product(f: (X -> Number)) -> Number","min : X?","max : X?"],"summary":"","types":["(X) -> Number","Number"],"urlPath":"list"},{"anchor":"list-number-sum","kind":"function","line":11,"name":"sum","qualifiedName":"List.sum","signatures":["sum : Number"],"summary":"Sums all elements. Returns `0` for an empty list.","types":[],"urlPath":"list"},{"anchor":"list-number-product","kind":"function","line":21,"name":"product","qualifiedName":"List.product","signatures":["product : Number"],"summary":"Multiplies all elements. Returns `1` for an empty list.","types":[],"urlPath":"list"},{"anchor":"list-number-product","kind":"function","line":31,"name":"product","qualifiedName":"List.product","signatures":["product(f: (X -> Number)) -> Number"],"summary":"Maps each element through `f` and multiplies the results.","types":["(X) -> Number","Number"],"urlPath":"list"},{"anchor":"list-number-min","kind":"function","line":41,"name":"min","qualifiedName":"List.min","signatures":["min : X?"],"summary":"Returns the smallest element wrapped in `Just`, or `None` for an empty list.","types":[],"urlPath":"list"},{"anchor":"list-number-max","kind":"function","line":51,"name":"max","qualifiedName":"List.max","signatures":["max : X?"],"summary":"Returns the largest element wrapped in `Just`, or `None` for an empty list.","types":[],"urlPath":"list"},{"anchor":"make-list","kind":"make","line":55,"name":"[X]","qualifiedName":"[X]","signatures":["first : X?","second : X?","third : X?","rest : [X]","last : X?","count : Integer","length : Integer","count(pred: (X -> Bool)) -> Integer","empty? : Bool","find(pred: (X -> Bool)) -> X?","any?(pred: (X -> Bool)) -> Bool","all?(pred: (X -> Bool)) -> Bool","map(f: (X -> Y)) -> [Y]","filter(pred: (X -> Bool)) -> [X]","reject(pred: (X -> Bool)) -> [X]","each(f: (X -> Void)) -> Void","reduce(acc: A, f: (A -> X -> A)) -> A","flatMap(f: (X -> [Y])) -> [Y]","at(i: Integer) -> X?","get(i: Integer) -> X?","get(i: Integer, default: X) -> X","contains?(elem: X) -> Bool","indexOf(elem: X) -> Integer?","findIndex(pred: (X -> Bool)) -> Integer?","takeWhile(pred: (X -> Bool)) -> [X]","dropWhile(pred: (X -> Bool)) -> [X]","uniq : [X]","partition(pred: (X -> Bool)) -> ([X], [X])","collect(f: (X -> Y?)) -> [Y]","take(n: Integer) -> [X]","drop(n: Integer) -> [X]","push(x: X) -> [X]","reverse : [X]","zip(other: [Y]) -> [(X, Y)]","flatten : [X]","sort : [X]","sort(comp: (X -> X -> Bool)) -> [X]","min(f: (X -> Y)) -> X?","max(f: (X -> Y)) -> X?","sum(f: (X -> Number)) -> Number","join(sep: String) -> String","join : String"],"summary":"","types":["(X) -> Bool","Integer","Bool","X?","(X) -> Y","[Y]","[X]","(X) -> Void","Void","A","(A) -> (X) -> A","(X) -> [Y]","(X) -> X","X","Integer?","((X) -> Bool) -> [X]","([X], [X])","((X) -> Y?) -> [Y]","[(X, Y)]","(X) -> (X) -> Bool","(X) -> Number","Number","String"],"urlPath":"list"},{"anchor":"list-first","kind":"function","line":63,"name":"first","qualifiedName":"List.first","signatures":["first : X?"],"summary":"Returns the first element wrapped in `Just`, or `None` if the list is empty.","types":[],"urlPath":"list"},{"anchor":"list-second","kind":"function","line":74,"name":"second","qualifiedName":"List.second","signatures":["second : X?"],"summary":"Returns the second element wrapped in `Just`, or `None` if the list has fewer than two elements.","types":[],"urlPath":"list"},{"anchor":"list-third","kind":"function","line":85,"name":"third","qualifiedName":"List.third","signatures":["third : X?"],"summary":"Returns the third element wrapped in `Just`, or `None` if the list has fewer than three elements.","types":[],"urlPath":"list"},{"anchor":"list-rest","kind":"function","line":97,"name":"rest","qualifiedName":"List.rest","signatures":["rest : [X]"],"summary":"Returns all elements after the first. Returns `[]` for an empty or single-element list.","types":[],"urlPath":"list"},{"anchor":"list-last","kind":"function","line":107,"name":"last","qualifiedName":"List.last","signatures":["last : X?"],"summary":"Returns the last element wrapped in `Just`, or `None` if the list is empty.","types":[],"urlPath":"list"},{"anchor":"list-count","kind":"function","line":118,"name":"count","qualifiedName":"List.count","signatures":["count : Integer"],"summary":"Returns the number of elements. When given a predicate, returns the count of elements for which it holds.","types":[],"urlPath":"list"},{"anchor":"list-length","kind":"function","line":122,"name":"length","qualifiedName":"List.length","signatures":["length : Integer"],"summary":"Compatibility spelling shared with String.","types":[],"urlPath":"list"},{"anchor":"list-count","kind":"function","line":126,"name":"count","qualifiedName":"List.count","signatures":["count(pred: (X -> Bool)) -> Integer"],"summary":"count(pred) is provided by the Enumerable trait.","types":["(X) -> Bool","Integer"],"urlPath":"list"},{"anchor":"list-empty?","kind":"function","line":135,"name":"empty?","qualifiedName":"List.empty?","signatures":["empty? : Bool"],"summary":"Returns `true` if the list contains no elements.","types":["Bool"],"urlPath":"list"},{"anchor":"list-find","kind":"function","line":149,"name":"find","qualifiedName":"List.find","signatures":["find(pred: (X -> Bool)) -> X?"],"summary":"Returns the first element satisfying the predicate wrapped in `Just`, or `None` if no element matches.\n\nfind/any?/all? are provided by the Enumerable trait.","types":["(X) -> Bool","X?"],"urlPath":"list"},{"anchor":"list-any?","kind":"function","line":159,"name":"any?","qualifiedName":"List.any?","signatures":["any?(pred: (X -> Bool)) -> Bool"],"summary":"Returns `true` if at least one element satisfies the predicate.","types":["(X) -> Bool","Bool"],"urlPath":"list"},{"anchor":"list-all?","kind":"function","line":169,"name":"all?","qualifiedName":"List.all?","signatures":["all?(pred: (X -> Bool)) -> Bool"],"summary":"Returns `true` if every element satisfies the predicate.","types":["(X) -> Bool","Bool"],"urlPath":"list"},{"anchor":"list-map","kind":"function","line":179,"name":"map","qualifiedName":"List.map","signatures":["map(f: (X -> Y)) -> [Y]"],"summary":"Transforms each element by applying `f`.\n\nmap/filter/each are provided by the Enumerable trait (in terms of reduce).","types":["(X) -> Y","[Y]"],"urlPath":"list"},{"anchor":"list-filter","kind":"function","line":188,"name":"filter","qualifiedName":"List.filter","signatures":["filter(pred: (X -> Bool)) -> [X]"],"summary":"Returns a new list containing only the elements for which `pred` is `true`.","types":["(X) -> Bool","[X]"],"urlPath":"list"},{"anchor":"list-reject","kind":"function","line":198,"name":"reject","qualifiedName":"List.reject","signatures":["reject(pred: (X -> Bool)) -> [X]"],"summary":"Returns a new list with all elements for which `pred` is `true` removed. The inverse of `filter`.","types":["(X) -> Bool","[X]"],"urlPath":"list"},{"anchor":"list-each","kind":"function","line":207,"name":"each","qualifiedName":"List.each","signatures":["each(f: (X -> Void)) -> Void"],"summary":"Calls `f` with each element for its side effects. Returns unit.","types":["(X) -> Void","Void"],"urlPath":"list"},{"anchor":"list-reduce","kind":"function","line":219,"name":"reduce","qualifiedName":"List.reduce","signatures":["reduce(acc: A, f: (A -> X -> A)) -> A"],"summary":"Folds the list from the left, starting with `acc` and combining each element via `f`.","types":["A","(A) -> (X) -> A"],"urlPath":"list"},{"anchor":"list-flatmap","kind":"function","line":226,"name":"flatMap","qualifiedName":"List.flatMap","signatures":["flatMap(f: (X -> [Y])) -> [Y]"],"summary":"Maps each element to a list and concatenates the results.","types":["(X) -> [Y]","[Y]"],"urlPath":"list"},{"anchor":"list-at","kind":"function","line":241,"name":"at","qualifiedName":"List.at","signatures":["at(i: Integer) -> X?"],"summary":"Returns the element at position `i` (0-based) wrapped in `Just`, or `None` if the index is out of range.","types":["Integer","X?"],"urlPath":"list"},{"anchor":"list-get","kind":"function","line":244,"name":"get","qualifiedName":"List.get","signatures":["get(i: Integer) -> X?","get(i: Integer, default: X) -> X"],"summary":"","types":["Integer","X?","(X) -> X"],"urlPath":"list"},{"anchor":"list-contains?","kind":"function","line":258,"name":"contains?","qualifiedName":"List.contains?","signatures":["contains?(elem: X) -> Bool"],"summary":"Returns `true` if `elem` is present in the list.","types":["X","Bool"],"urlPath":"list"},{"anchor":"list-indexof","kind":"function","line":270,"name":"indexOf","qualifiedName":"List.indexOf","signatures":["indexOf(elem: X) -> Integer?"],"summary":"Returns `true` if the first index at which `elem` appears, wrapped in `Just`, or `None` if the element is not present.","types":["X","Integer?"],"urlPath":"list"},{"anchor":"list-findindex","kind":"function","line":283,"name":"findIndex","qualifiedName":"List.findIndex","signatures":["findIndex(pred: (X -> Bool)) -> Integer?"],"summary":"Returns the index of the first element satisfying `pred`, wrapped in `Just`, or `None` if none does. The predicate counterpart of `indexOf`, which searches by value.","types":["(X) -> Bool","Integer?"],"urlPath":"list"},{"anchor":"list-takewhile","kind":"function","line":300,"name":"takeWhile","qualifiedName":"List.takeWhile","signatures":["takeWhile(pred: (X -> Bool)) -> [X]"],"summary":"Returns the longest leading run of elements satisfying `pred`. Stops at the first element that does not, so it is not `filter` — later matches are dropped with everything after the first failure.","types":["((X) -> Bool) -> [X]"],"urlPath":"list"},{"anchor":"list-dropwhile","kind":"function","line":314,"name":"dropWhile","qualifiedName":"List.dropWhile","signatures":["dropWhile(pred: (X -> Bool)) -> [X]"],"summary":"Returns what is left after `takeWhile` — everything from the first element that does not satisfy `pred` onwards.","types":["((X) -> Bool) -> [X]"],"urlPath":"list"},{"anchor":"list-uniq","kind":"function","line":327,"name":"uniq","qualifiedName":"List.uniq","signatures":["uniq : [X]"],"summary":"Returns a new list with duplicate elements removed, preserving the first occurrence of each element.","types":[],"urlPath":"list"},{"anchor":"list-partition","kind":"function","line":338,"name":"partition","qualifiedName":"List.partition","signatures":["partition(pred: (X -> Bool)) -> ([X], [X])"],"summary":"Splits the list into two lists: those for which `pred` is `true` (first) and those for which it is `false` (second).","types":["(X) -> Bool","([X], [X])"],"urlPath":"list"},{"anchor":"list-collect","kind":"function","line":358,"name":"collect","qualifiedName":"List.collect","signatures":["collect(f: (X -> Y?)) -> [Y]"],"summary":"Maps each element through `f` (which returns an `Optional`), keeping and unwrapping the `Just(y)` results and dropping `None`. Filter + map fused.","types":["((X) -> Y?) -> [Y]"],"urlPath":"list"},{"anchor":"list-take","kind":"function","line":367,"name":"take","qualifiedName":"List.take","signatures":["take(n: Integer) -> [X]"],"summary":"Returns the first `n` elements.","types":["Integer","[X]"],"urlPath":"list"},{"anchor":"list-drop","kind":"function","line":377,"name":"drop","qualifiedName":"List.drop","signatures":["drop(n: Integer) -> [X]"],"summary":"Drops the first `n` elements.","types":["Integer","[X]"],"urlPath":"list"},{"anchor":"list-push","kind":"function","line":387,"name":"push","qualifiedName":"List.push","signatures":["push(x: X) -> [X]"],"summary":"Returns a new list with `x` appended at the end.","types":["X","[X]"],"urlPath":"list"},{"anchor":"list-reverse","kind":"function","line":396,"name":"reverse","qualifiedName":"List.reverse","signatures":["reverse : [X]"],"summary":"Returns the elements in reverse order.","types":[],"urlPath":"list"},{"anchor":"list-zip","kind":"function","line":407,"name":"zip","qualifiedName":"List.zip","signatures":["zip(other: [Y]) -> [(X, Y)]"],"summary":"Pairs each element of this list with the corresponding element of `other`. Stops at the end of the shorter list.","types":["[Y]","[(X, Y)]"],"urlPath":"list"},{"anchor":"list-flatten","kind":"function","line":416,"name":"flatten","qualifiedName":"List.flatten","signatures":["flatten : [X]"],"summary":"Flattens exactly one level of nesting. Only valid on lists of lists.","types":[],"urlPath":"list"},{"anchor":"list-sort","kind":"function","line":425,"name":"sort","qualifiedName":"List.sort","signatures":["sort : [X]"],"summary":"Returns the elements sorted in ascending natural order.","types":[],"urlPath":"list"},{"anchor":"list-sort","kind":"function","line":437,"name":"sort","qualifiedName":"List.sort","signatures":["sort(comp: (X -> X -> Bool)) -> [X]"],"summary":"Returns the elements sorted using a custom comparator. `comp` should return `true` when its first argument should come before its second.","types":["(X) -> (X) -> Bool","[X]"],"urlPath":"list"},{"anchor":"list-min","kind":"function","line":448,"name":"min","qualifiedName":"List.min","signatures":["min(f: (X -> Y)) -> X?"],"summary":"Returns the element with the smallest `f` key wrapped in `Just`, or `None` for an empty list.","types":["(X) -> Y","X?"],"urlPath":"list"},{"anchor":"list-max","kind":"function","line":459,"name":"max","qualifiedName":"List.max","signatures":["max(f: (X -> Y)) -> X?"],"summary":"Returns the element with the largest `f` key wrapped in `Just`, or `None` for an empty list.","types":["(X) -> Y","X?"],"urlPath":"list"},{"anchor":"list-sum","kind":"function","line":469,"name":"sum","qualifiedName":"List.sum","signatures":["sum(f: (X -> Number)) -> Number"],"summary":"Maps each element through `f` and sums the results.","types":["(X) -> Number","Number"],"urlPath":"list"},{"anchor":"list-join","kind":"function","line":486,"name":"join","qualifiedName":"List.join","signatures":["join(sep: String) -> String","join : String"],"summary":"Receiver is `[X]`, not `[String | Char]`: the intrinsic renders whatever it is given, so `[1, 2].join(\", \")` is \"1, 2\" on both backends. The narrower receiver only ever fired once element types became precise enough to catch it — until then `map`/`filter` handed `join` an unknown element type and the restriction checked nothing. Concatenates all elements, placing `sep` between each adjacent pair. With no separator the elements are joined directly.","types":["String"],"urlPath":"list"},{"anchor":"type-map","kind":"type","line":8,"name":"Map","qualifiedName":"Map","signatures":[],"summary":"Declared for the same reason list.kex declares `type List<X> = [X]`: it gives the name `Map` a source declaration, so it resolves as a type through the collected interfaces rather than needing to be known to the compiler.","types":[],"urlPath":"map"},{"anchor":"make-map","kind":"make","line":10,"name":"Map<K, V>","qualifiedName":"Map<K, V>","signatures":["reduce(acc, g)","combine(other: This) -> This","get(key: K) -> V?","get(key: K, default: V) -> V","put(k: K, v: V) -> Map<K, V>","delete(key: K) -> Map<K, V>","has?(key: K) -> Bool","empty? : Bool","count : Integer","count : (K -> V -> Bool) -> Integer","keys : [K]","values : [V]","entries : [(K, V)]","each : (K -> V -> Void) -> Void","map : (K -> V -> R) -> [R]","mapValues(f: (V -> W)) -> Map<K, W>","mapKeys(f: (K -> J)) -> Map<J, V>","filter(pred: (K -> V -> Bool)) -> Map<K, V>","reject(pred: (K -> V -> Bool)) -> Map<K, V>","merge(other: Map<K, V>) -> Map<K, V>","any? : (K -> V -> Bool) -> Bool","all? : (K -> V -> Bool) -> Bool","find : (K -> V -> Bool) -> (K, V)?","blank? : Bool"],"summary":"","types":["This","K","V?","(V) -> V","V","Map<K, V>","Bool","((K) -> (V) -> Bool) -> Integer","((K) -> (V) -> Void) -> Void","((K) -> (V) -> R) -> [R]","(V) -> W","Map<K, W>","(K) -> J","Map<J, V>","(K) -> (V) -> Bool","((K) -> (V) -> Bool) -> Bool","((K) -> (V) -> Bool) -> (K, V)?"],"urlPath":"map"},{"anchor":"map-reduce","kind":"function","line":14,"name":"reduce","qualifiedName":"Map.reduce","signatures":["reduce(acc, g)"],"summary":"Enumerable primitive: fold over (key, value) pairs in canonical (sorted) order. Collection-producing operations come from Enumerable and traversal queries come from Foldable; their two-arg blocks auto-splat each pair.","types":[],"urlPath":"map"},{"anchor":"map-identity","kind":"function","line":17,"name":"identity","qualifiedName":"Map.identity","signatures":[],"summary":"Maps form a right-biased Monoid under merge.","types":[],"urlPath":"map"},{"anchor":"map-combine","kind":"function","line":18,"name":"combine","qualifiedName":"Map.combine","signatures":["combine(other: This) -> This"],"summary":"","types":["This"],"urlPath":"map"},{"anchor":"map-get","kind":"function","line":27,"name":"get","qualifiedName":"Map.get","signatures":["get(key: K) -> V?","get(key: K, default: V) -> V"],"summary":"Returns the value for `key` wrapped in `Just`, or `None` if absent. When a `default` is supplied, returns the raw unwrapped value instead.","types":["K","V?","(V) -> V"],"urlPath":"map"},{"anchor":"map-put","kind":"function","line":38,"name":"put","qualifiedName":"Map.put","signatures":["put(k: K, v: V) -> Map<K, V>"],"summary":"Returns a new map with `key` mapped to `value`. Use `put!` to rebind the receiver variable.","types":["K","V","Map<K, V>"],"urlPath":"map"},{"anchor":"map-delete","kind":"function","line":46,"name":"delete","qualifiedName":"Map.delete","signatures":["delete(key: K) -> Map<K, V>"],"summary":"Returns a new map without `key`. No-op if the key is absent. Use `delete!` to rebind the receiver variable.","types":["K","Map<K, V>"],"urlPath":"map"},{"anchor":"map-has?","kind":"function","line":53,"name":"has?","qualifiedName":"Map.has?","signatures":["has?(key: K) -> Bool"],"summary":"Returns `true` if `key` exists in the map.","types":["K","Bool"],"urlPath":"map"},{"anchor":"map-empty?","kind":"function","line":60,"name":"empty?","qualifiedName":"Map.empty?","signatures":["empty? : Bool"],"summary":"Returns `true` if the map has no entries.","types":[],"urlPath":"map"},{"anchor":"map-count","kind":"function","line":69,"name":"count","qualifiedName":"Map.count","signatures":["count : Integer"],"summary":"Returns the number of key-value pairs. When given a predicate, counts only matching entries.","types":[],"urlPath":"map"},{"anchor":"map-count","kind":"function","line":71,"name":"count","qualifiedName":"Map.count","signatures":["count : (K -> V -> Bool) -> Integer"],"summary":"","types":["((K) -> (V) -> Bool) -> Integer"],"urlPath":"map"},{"anchor":"map-keys","kind":"function","line":77,"name":"keys","qualifiedName":"Map.keys","signatures":["keys : [K]"],"summary":"Returns all keys as a list, in insertion order.","types":[],"urlPath":"map"},{"anchor":"map-values","kind":"function","line":84,"name":"values","qualifiedName":"Map.values","signatures":["values : [V]"],"summary":"Returns all values as a list, in insertion order.","types":[],"urlPath":"map"},{"anchor":"map-entries","kind":"function","line":91,"name":"entries","qualifiedName":"Map.entries","signatures":["entries : [(K, V)]"],"summary":"Returns all key-value pairs as a list of tuples, in insertion order.","types":[],"urlPath":"map"},{"anchor":"map-each","kind":"function","line":98,"name":"each","qualifiedName":"Map.each","signatures":["each : (K -> V -> Void) -> Void"],"summary":"Calls `f` with each key-value pair for its side effects.","types":["((K) -> (V) -> Void) -> Void"],"urlPath":"map"},{"anchor":"map-map","kind":"function","line":104,"name":"map","qualifiedName":"Map.map","signatures":["map : (K -> V -> R) -> [R]"],"summary":"Transforms each entry by calling `f(k, v)`. Returns a list of results.","types":["((K) -> (V) -> R) -> [R]"],"urlPath":"map"},{"anchor":"map-mapvalues","kind":"function","line":110,"name":"mapValues","qualifiedName":"Map.mapValues","signatures":["mapValues(f: (V -> W)) -> Map<K, W>"],"summary":"Returns a new map with all values transformed by `f`.","types":["(V) -> W","Map<K, W>"],"urlPath":"map"},{"anchor":"map-mapkeys","kind":"function","line":120,"name":"mapKeys","qualifiedName":"Map.mapKeys","signatures":["mapKeys(f: (K -> J)) -> Map<J, V>"],"summary":"Returns a new map with all keys transformed by `f`.","types":["(K) -> J","Map<J, V>"],"urlPath":"map"},{"anchor":"map-filter","kind":"function","line":131,"name":"filter","qualifiedName":"Map.filter","signatures":["filter(pred: (K -> V -> Bool)) -> Map<K, V>"],"summary":"Returns a new map keeping only entries for which `pred` returns `true`.\n\nMap overrides the map-returning HOFs (Enumerable's default returns a list).","types":["(K) -> (V) -> Bool","Map<K, V>"],"urlPath":"map"},{"anchor":"map-reject","kind":"function","line":141,"name":"reject","qualifiedName":"Map.reject","signatures":["reject(pred: (K -> V -> Bool)) -> Map<K, V>"],"summary":"Returns a new map with all entries for which `pred` returns `true` removed.","types":["(K) -> (V) -> Bool","Map<K, V>"],"urlPath":"map"},{"anchor":"map-merge","kind":"function","line":152,"name":"merge","qualifiedName":"Map.merge","signatures":["merge(other: Map<K, V>) -> Map<K, V>"],"summary":"Returns a new map combining `this` and `other`. On key conflict, `other`'s value wins.","types":["Map<K, V>"],"urlPath":"map"},{"anchor":"map-any?","kind":"function","line":159,"name":"any?","qualifiedName":"Map.any?","signatures":["any? : (K -> V -> Bool) -> Bool"],"summary":"Returns `true` if at least one entry satisfies `pred`.","types":["((K) -> (V) -> Bool) -> Bool"],"urlPath":"map"},{"anchor":"map-all?","kind":"function","line":165,"name":"all?","qualifiedName":"Map.all?","signatures":["all? : (K -> V -> Bool) -> Bool"],"summary":"Returns `true` if every entry satisfies `pred`.","types":["((K) -> (V) -> Bool) -> Bool"],"urlPath":"map"},{"anchor":"map-find","kind":"function","line":172,"name":"find","qualifiedName":"Map.find","signatures":["find : (K -> V -> Bool) -> (K, V)?"],"summary":"Returns the first entry satisfying `pred` as a tuple wrapped in `Just`, or `None` if no entry matches.","types":["((K) -> (V) -> Bool) -> (K, V)?"],"urlPath":"map"},{"anchor":"map-blank?","kind":"function","line":176,"name":"blank?","qualifiedName":"Map.blank?","signatures":["blank? : Bool"],"summary":"","types":[],"urlPath":"map"},{"anchor":"module-math","kind":"module","line":6,"name":"Math","qualifiedName":"Math","signatures":["sqrt(x: Number) -> Float","cbrt(x: Number) -> Float","sin(x: Number) -> Float","cos(x: Number) -> Float","tan(x: Number) -> Float","asin(x: Number) -> Float","acos(x: Number) -> Float","atan(x: Number) -> Float","atan2(y: Number, x: Number) -> Float","sinh(x: Number) -> Float","cosh(x: Number) -> Float","tanh(x: Number) -> Float","log(x: Number) -> Float","log(x: Number, base: Number) -> Float","log2(x: Number) -> Float","log10(x: Number) -> Float","exp(x: Number) -> Float","pow(x: Number, y: Number) -> Float","abs(x: Number) -> Number","floor(x: Number) -> Integer","ceil(x: Number) -> Integer","hypot(x: Number, y: Number) -> Float"],"summary":"The `Math` module provides standard mathematical constants and functions. All trigonometric functions operate in radians. A Kex `Float` is always finite, so a domain error (`Math.sqrt(-1.0)`) or an overflow (`Math.exp(1000.0)`) raises rather than producing `NaN` or `Infinity` — the same rule BEAM enforces, where those two values cannot exist at all.","types":["","Number","Float","(Number) -> Float","Integer"],"urlPath":"math"},{"anchor":"constant-math-pi","kind":"constant","line":12,"name":"PI","qualifiedName":"Math.PI","signatures":[],"summary":"Math.PI : Float Ratio of a circle's circumference to its diameter.","types":[""],"urlPath":"math"},{"anchor":"constant-math-e","kind":"constant","line":19,"name":"E","qualifiedName":"Math.E","signatures":[],"summary":"Math.E : Float Base of the natural logarithm.","types":[""],"urlPath":"math"},{"anchor":"function-math-sqrt","kind":"function","line":29,"name":"sqrt","qualifiedName":"Math.sqrt","signatures":["sqrt(x: Number) -> Float"],"summary":"Square root of `x`. Raises for negative input, which has no real root.","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-cbrt","kind":"function","line":39,"name":"cbrt","qualifiedName":"Math.cbrt","signatures":["cbrt(x: Number) -> Float"],"summary":"Cube root of `x`.","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-sin","kind":"function","line":49,"name":"sin","qualifiedName":"Math.sin","signatures":["sin(x: Number) -> Float"],"summary":"Sine of `x` (radians).","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-cos","kind":"function","line":59,"name":"cos","qualifiedName":"Math.cos","signatures":["cos(x: Number) -> Float"],"summary":"Cosine of `x` (radians).","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-tan","kind":"function","line":69,"name":"tan","qualifiedName":"Math.tan","signatures":["tan(x: Number) -> Float"],"summary":"Tangent of `x` (radians).","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-asin","kind":"function","line":79,"name":"asin","qualifiedName":"Math.asin","signatures":["asin(x: Number) -> Float"],"summary":"Inverse sine (arc sine) of `x`, result in radians.","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-acos","kind":"function","line":89,"name":"acos","qualifiedName":"Math.acos","signatures":["acos(x: Number) -> Float"],"summary":"Inverse cosine (arc cosine) of `x`, result in radians.","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-atan","kind":"function","line":99,"name":"atan","qualifiedName":"Math.atan","signatures":["atan(x: Number) -> Float"],"summary":"Inverse tangent (arc tangent) of `x`, result in radians in (-π/2, π/2).","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-atan2","kind":"function","line":112,"name":"atan2","qualifiedName":"Math.atan2","signatures":["atan2(y: Number, x: Number) -> Float"],"summary":"Two-argument arc tangent. Returns the angle of vector (`x`, `y`) in (-π, π]. Handles the sign of both arguments to place the result in the correct quadrant.","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-sinh","kind":"function","line":119,"name":"sinh","qualifiedName":"Math.sinh","signatures":["sinh(x: Number) -> Float"],"summary":"Hyperbolic sine.","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-cosh","kind":"function","line":126,"name":"cosh","qualifiedName":"Math.cosh","signatures":["cosh(x: Number) -> Float"],"summary":"Hyperbolic cosine.","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-tanh","kind":"function","line":133,"name":"tanh","qualifiedName":"Math.tanh","signatures":["tanh(x: Number) -> Float"],"summary":"Hyperbolic tangent.","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-log","kind":"function","line":146,"name":"log","qualifiedName":"Math.log","signatures":["log(x: Number) -> Float","log(x: Number, base: Number) -> Float"],"summary":"Natural logarithm of `x` (base e). With two arguments, computes log base `base`.","types":["Number","Float","(Number) -> Float"],"urlPath":"math"},{"anchor":"function-math-log2","kind":"function","line":158,"name":"log2","qualifiedName":"Math.log2","signatures":["log2(x: Number) -> Float"],"summary":"Base-2 logarithm of `x`.","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-log10","kind":"function","line":168,"name":"log10","qualifiedName":"Math.log10","signatures":["log10(x: Number) -> Float"],"summary":"Base-10 logarithm of `x`.","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-exp","kind":"function","line":178,"name":"exp","qualifiedName":"Math.exp","signatures":["exp(x: Number) -> Float"],"summary":"`e` raised to the power `x`.","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-pow","kind":"function","line":189,"name":"pow","qualifiedName":"Math.pow","signatures":["pow(x: Number, y: Number) -> Float"],"summary":"`x` raised to the power `y`.","types":["Number","Float"],"urlPath":"math"},{"anchor":"function-math-abs","kind":"function","line":196,"name":"abs","qualifiedName":"Math.abs","signatures":["abs(x: Number) -> Number"],"summary":"Absolute value of `x`.","types":["Number"],"urlPath":"math"},{"anchor":"function-math-floor","kind":"function","line":203,"name":"floor","qualifiedName":"Math.floor","signatures":["floor(x: Number) -> Integer"],"summary":"Floor of `x` — largest integer not greater than `x`.","types":["Number","Integer"],"urlPath":"math"},{"anchor":"function-math-ceil","kind":"function","line":210,"name":"ceil","qualifiedName":"Math.ceil","signatures":["ceil(x: Number) -> Integer"],"summary":"Ceiling of `x` — smallest integer not less than `x`.","types":["Number","Integer"],"urlPath":"math"},{"anchor":"function-math-hypot","kind":"function","line":222,"name":"hypot","qualifiedName":"Math.hypot","signatures":["hypot(x: Number, y: Number) -> Float"],"summary":"Euclidean distance — equivalent to +sqrt(x*x + y*y)+ but avoids intermediate overflow for large values.","types":["Number","Float"],"urlPath":"math"},{"anchor":"make-integer","kind":"make","line":1,"name":"Integer","qualifiedName":"Integer","signatures":["even? : Bool","odd? : Bool","abs : Integer","sqrt : Float","modulo(n: Integer) -> Integer","in?(range: Range<Integer>) -> Bool","times(block: (Integer -> Void)) -> Void","floor : Integer","ceil : Integer","round : Integer"],"summary":"","types":["Integer","Range<Integer>","Bool","(Integer) -> Void","Void"],"urlPath":"number"},{"anchor":"integer-even?","kind":"function","line":9,"name":"even?","qualifiedName":"Integer.even?","signatures":["even? : Bool"],"summary":"Returns `true` if the integer is even.","types":[],"urlPath":"number"},{"anchor":"integer-odd?","kind":"function","line":19,"name":"odd?","qualifiedName":"Integer.odd?","signatures":["odd? : Bool"],"summary":"Returns `true` if the integer is odd.","types":[],"urlPath":"number"},{"anchor":"integer-abs","kind":"function","line":29,"name":"abs","qualifiedName":"Integer.abs","signatures":["abs : Integer"],"summary":"Returns the absolute value.","types":[],"urlPath":"number"},{"anchor":"integer-sqrt","kind":"function","line":38,"name":"sqrt","qualifiedName":"Integer.sqrt","signatures":["sqrt : Float"],"summary":"Returns the square root as a Float.","types":[],"urlPath":"number"},{"anchor":"integer-modulo","kind":"function","line":50,"name":"modulo","qualifiedName":"Integer.modulo","signatures":["modulo(n: Integer) -> Integer"],"summary":"Returns `this` modulo `n`. The result has the same sign as `n`, consistent with mathematical modulo (not C remainder).","types":["Integer"],"urlPath":"number"},{"anchor":"integer-in?","kind":"function","line":61,"name":"in?","qualifiedName":"Integer.in?","signatures":["in?(range: Range<Integer>) -> Bool"],"summary":"Returns `true` if the integer falls within `range` (inclusive).","types":["Range<Integer>","Bool"],"urlPath":"number"},{"anchor":"integer-times","kind":"function","line":71,"name":"times","qualifiedName":"Integer.times","signatures":["times(block: (Integer -> Void)) -> Void"],"summary":"Calls `f` exactly `this` times, passing the current index (0-based).","types":["(Integer) -> Void","Void"],"urlPath":"number"},{"anchor":"integer-floor","kind":"function","line":75,"name":"floor","qualifiedName":"Integer.floor","signatures":["floor : Integer"],"summary":"Returns the greatest integer ≤ this. No-op on integers.","types":[],"urlPath":"number"},{"anchor":"integer-ceil","kind":"function","line":79,"name":"ceil","qualifiedName":"Integer.ceil","signatures":["ceil : Integer"],"summary":"Returns the smallest integer ≥ this. No-op on integers.","types":[],"urlPath":"number"},{"anchor":"integer-round","kind":"function","line":83,"name":"round","qualifiedName":"Integer.round","signatures":["round : Integer"],"summary":"Rounds to the nearest integer. No-op on integers.","types":[],"urlPath":"number"},{"anchor":"make-float","kind":"make","line":88,"name":"Float","qualifiedName":"Float","signatures":["abs : Float","sqrt : Float","in?(range: Range<Float>) -> Bool","floor : Integer","ceil : Integer","round : Integer","toInteger : Integer"],"summary":"","types":["Range<Float>","Bool"],"urlPath":"number"},{"anchor":"float-abs","kind":"function","line":95,"name":"abs","qualifiedName":"Float.abs","signatures":["abs : Float"],"summary":"Returns the absolute value.","types":[],"urlPath":"number"},{"anchor":"float-sqrt","kind":"function","line":104,"name":"sqrt","qualifiedName":"Float.sqrt","signatures":["sqrt : Float"],"summary":"Returns the square root.","types":[],"urlPath":"number"},{"anchor":"float-in?","kind":"function","line":114,"name":"in?","qualifiedName":"Float.in?","signatures":["in?(range: Range<Float>) -> Bool"],"summary":"Returns `true` if the float falls within `range` (inclusive).","types":["Range<Float>","Bool"],"urlPath":"number"},{"anchor":"float-floor","kind":"function","line":120,"name":"floor","qualifiedName":"Float.floor","signatures":["floor : Integer"],"summary":"Returns the greatest integer ≤ this.","types":[],"urlPath":"number"},{"anchor":"float-ceil","kind":"function","line":124,"name":"ceil","qualifiedName":"Float.ceil","signatures":["ceil : Integer"],"summary":"Returns the smallest integer ≥ this.","types":[],"urlPath":"number"},{"anchor":"float-round","kind":"function","line":128,"name":"round","qualifiedName":"Float.round","signatures":["round : Integer"],"summary":"Rounds to the nearest integer.","types":[],"urlPath":"number"},{"anchor":"float-tointeger","kind":"function","line":132,"name":"toInteger","qualifiedName":"Float.toInteger","signatures":["toInteger : Integer"],"summary":"Truncates toward zero, converting to an `Integer`.","types":[],"urlPath":"number"},{"anchor":"module-integer","kind":"module","line":137,"name":"Integer","qualifiedName":"Integer","signatures":["parse(s: String) -> Result<Integer, ParseError>","parse(s: String, radix: Integer) -> Result<Integer, ParseError>","parsePrefix(s: String) -> (Integer, String)?"],"summary":"","types":["String","Result<Integer, ParseError>","(Integer) -> Result<Integer, ParseError>","Integer","(Integer, String)?"],"urlPath":"number"},{"anchor":"function-integer-parse","kind":"function","line":138,"name":"parse","qualifiedName":"Integer.parse","signatures":["parse(s: String) -> Result<Integer, ParseError>","parse(s: String, radix: Integer) -> Result<Integer, ParseError>"],"summary":"Parses `s` in base `radix` (2..36), e.g. `Integer.parse(\"ff\", radix: 16)`. Digits above 9 are accepted in either case.","types":["String","Result<Integer, ParseError>","(Integer) -> Result<Integer, ParseError>","Integer"],"urlPath":"number"},{"anchor":"function-integer-parseprefix","kind":"function","line":146,"name":"parsePrefix","qualifiedName":"Integer.parsePrefix","signatures":["parsePrefix(s: String) -> (Integer, String)?"],"summary":"","types":["String","(Integer, String)?"],"urlPath":"number"},{"anchor":"module-float","kind":"module","line":150,"name":"Float","qualifiedName":"Float","signatures":["parse(s: String) -> Result<Float, ParseError>","parsePrefix(s: String) -> (Float, String)?"],"summary":"","types":["String","Result<Float, ParseError>","(Float, String)?"],"urlPath":"number"},{"anchor":"function-float-parse","kind":"function","line":151,"name":"parse","qualifiedName":"Float.parse","signatures":["parse(s: String) -> Result<Float, ParseError>"],"summary":"","types":["String","Result<Float, ParseError>"],"urlPath":"number"},{"anchor":"function-float-parseprefix","kind":"function","line":154,"name":"parsePrefix","qualifiedName":"Float.parsePrefix","signatures":["parsePrefix(s: String) -> (Float, String)?"],"summary":"","types":["String","(Float, String)?"],"urlPath":"number"},{"anchor":"module-number","kind":"module","line":158,"name":"Number","qualifiedName":"Number","signatures":["parse(s: String) -> Result<Number, ParseError>"],"summary":"","types":["String","Result<Number, ParseError>"],"urlPath":"number"},{"anchor":"function-number-parse","kind":"function","line":159,"name":"parse","qualifiedName":"Number.parse","signatures":["parse(s: String) -> Result<Number, ParseError>"],"summary":"","types":["String","Result<Number, ParseError>"],"urlPath":"number"},{"anchor":"type-optional","kind":"type","line":3,"name":"Optional","qualifiedName":"Optional","signatures":[],"summary":"`X?` is shorthand for `Optional<X>`. `Just(x)` wraps a value; `None` represents absence.","types":["X"],"urlPath":"optional"},{"anchor":"type-result","kind":"type","line":7,"name":"Result","qualifiedName":"Result","signatures":[],"summary":"`Result<X, E>` represents a computation that either succeeded with `Ok(x)` or failed with `Error(e)`.","types":["X","E"],"urlPath":"optional"},{"anchor":"type-either","kind":"type","line":10,"name":"Either","qualifiedName":"Either","signatures":[],"summary":"`Either<L, R>` holds one of two possible value types.","types":["L","R"],"urlPath":"optional"},{"anchor":"trait-optionable","kind":"trait","line":14,"name":"Optionable","qualifiedName":"Optionable","signatures":[],"summary":"Marker traits used by generic code that accepts one of these ADT families. Their conformances are exported through KexI like any user-defined trait.","types":[],"urlPath":"optional"},{"anchor":"trait-resultable","kind":"trait","line":17,"name":"Resultable","qualifiedName":"Resultable","signatures":[],"summary":"","types":[],"urlPath":"optional"},{"anchor":"trait-eitherable","kind":"trait","line":20,"name":"Eitherable","qualifiedName":"Eitherable","signatures":[],"summary":"","types":[],"urlPath":"optional"},{"anchor":"make-optional","kind":"make","line":23,"name":"Optional<X>","qualifiedName":"Optional<X>","signatures":["set? : Bool","none? : Bool","or(default: X) -> X","map(f: (X -> Y)) -> Y?","flatMap(f: (X -> Y?)) -> Y?"],"summary":"","types":["Bool","(X) -> X","((X) -> Y) -> Y?","((X) -> Y?) -> Y?"],"urlPath":"optional"},{"anchor":"optional-set?","kind":"function","line":31,"name":"set?","qualifiedName":"Optional.set?","signatures":["set? : Bool"],"summary":"Returns `true` if this optional has value.","types":["Bool"],"urlPath":"optional"},{"anchor":"optional-none?","kind":"function","line":42,"name":"none?","qualifiedName":"Optional.none?","signatures":["none? : Bool"],"summary":"Returns `true` if this optional is empty.","types":["Bool"],"urlPath":"optional"},{"anchor":"optional-or","kind":"function","line":54,"name":"or","qualifiedName":"Optional.or","signatures":["or(default: X) -> X"],"summary":"Unwraps the value, returning `default` when `None`.","types":["(X) -> X"],"urlPath":"optional"},{"anchor":"optional-map","kind":"function","line":66,"name":"map","qualifiedName":"Optional.map","signatures":["map(f: (X -> Y)) -> Y?"],"summary":"Applies `f` to the wrapped value, leaving `None` unchanged.","types":["((X) -> Y) -> Y?"],"urlPath":"optional"},{"anchor":"optional-flatmap","kind":"function","line":78,"name":"flatMap","qualifiedName":"Optional.flatMap","signatures":["flatMap(f: (X -> Y?)) -> Y?"],"summary":"Chains optional-returning functions, short-circuiting on `None`.","types":["((X) -> Y?) -> Y?"],"urlPath":"optional"},{"anchor":"make-result","kind":"make","line":83,"name":"Result<X, E>","qualifiedName":"Result<X, E>","signatures":["ok? : Bool","error? : Bool","or(default: X) -> X","map(f: (X -> Y)) -> Result<Y, E>","flatMap(f: (X -> Result<Y, E>)) -> Result<Y, E>","optional : X?"],"summary":"","types":["Bool","(X) -> X","((X) -> Y) -> Result<Y, E>","((X) -> Result<Y, E>) -> Result<Y, E>","X?"],"urlPath":"optional"},{"anchor":"result-ok?","kind":"function","line":91,"name":"ok?","qualifiedName":"Result.ok?","signatures":["ok? : Bool"],"summary":"Returns `true` if the result is `Ok`.","types":["Bool"],"urlPath":"optional"},{"anchor":"result-error?","kind":"function","line":102,"name":"error?","qualifiedName":"Result.error?","signatures":["error? : Bool"],"summary":"Returns `true` if the result is `Error`.","types":["Bool"],"urlPath":"optional"},{"anchor":"result-or","kind":"function","line":114,"name":"or","qualifiedName":"Result.or","signatures":["or(default: X) -> X"],"summary":"Unwraps the `Ok` value, returning `default` on `Error`.","types":["(X) -> X"],"urlPath":"optional"},{"anchor":"result-map","kind":"function","line":126,"name":"map","qualifiedName":"Result.map","signatures":["map(f: (X -> Y)) -> Result<Y, E>"],"summary":"Applies `f` to the `Ok` value, passing `Error` through unchanged.","types":["((X) -> Y) -> Result<Y, E>"],"urlPath":"optional"},{"anchor":"result-flatmap","kind":"function","line":137,"name":"flatMap","qualifiedName":"Result.flatMap","signatures":["flatMap(f: (X -> Result<Y, E>)) -> Result<Y, E>"],"summary":"Chains result-returning functions, propagating `Error`.","types":["((X) -> Result<Y, E>) -> Result<Y, E>"],"urlPath":"optional"},{"anchor":"result-optional","kind":"function","line":148,"name":"optional","qualifiedName":"Result.optional","signatures":["optional : X?"],"summary":"Converts to `Optional`, discarding the error value on failure.","types":["X?"],"urlPath":"optional"},{"anchor":"function-or","kind":"function","line":155,"name":"or","qualifiedName":"or","signatures":["or(value, _)"],"summary":"Universal `.or(default)` catch-all: a value that is neither Optional nor Result is already a successful result — return it unchanged.","types":[],"urlPath":"optional"},{"anchor":"function-to","kind":"function","line":175,"name":"to","qualifiedName":"to","signatures":["to(value, t, radix: Integer)"],"summary":"Universal `.to(Type)` conversion. The type argument is a runtime Type value (e.g. String, Integer, Float, List). Returns an Optional result.\n\nOptional, NOT Result, and deliberately: `to` is the everyday conversion, and what it can report on failure is almost always derivable from the types alone — `x.to(List)` on a non-list fails because a non-list is not a list, which an error payload saying \"cannot convert Int to List\" does not improve. When the reason IS information — where a parse gave up and on what — `Integer.parse`/`Float.parse` answer with `Result<_, ParseError>`. So: `to` for every day, `parse` when the failure needs handling.\n\nA String target goes through the Showable protocol, exactly as `make Showable do let to(String) = Just(this.showValue)` says it does. The intrinsic below renders the raw runtime term instead, which on BEAM never reached the `Optional` implementation of showValue: `Just(42).to(String)` answered `Just(\"Just(42)\")` there and `Just(\"42\")` on the tree walker, which dispatches to the Showable clause. Intrinsics cannot call back into the prelude (dependency_layering_test), so the protocol has to be honoured here.","types":["Integer"],"urlPath":"optional"},{"anchor":"make-either","kind":"make","line":187,"name":"Either<L, R>","qualifiedName":"Either<L, R>","signatures":[],"summary":"","types":[],"urlPath":"optional"},{"anchor":"module-parser","kind":"module","line":8,"name":"Parser","qualifiedName":"Parser","signatures":["parse : String -> Result<Program, ParseError>","parse : String -> String -> Result<Program, ParseError>","parseFile : FS.FilePath -> Result<Program, ParseError>","parseType : String -> Result<TypeRef, ParseError>","parseExpression : String -> Result<Expression, ParseError>","toString : String","toString : String"],"summary":"Parses Kex source code into a structured AST at runtime.\n\nReturns `Result<Program, ParseError>` — the AST includes module definitions, function signatures, type/record definitions, traits, make blocks, and doc-comments extracted from `#` lines.\n\nFunction bodies are intentionally omitted from the output.","types":["(String) -> Result<Program, ParseError>","(String) -> (String) -> Result<Program, ParseError>","(FS.FilePath) -> Result<Program, ParseError>","(String) -> Result<TypeRef, ParseError>","(String) -> Result<Expression, ParseError>","String","[TypeRef]","TypeRef","[PatternRef]","PatternRef","Int","Float","[String]","[Expression]","Bool","Atom","Expression","[Expression]?"],"urlPath":"parser"},{"anchor":"function-parser-parse","kind":"function","line":10,"name":"parse","qualifiedName":"Parser.parse","signatures":["parse : String -> Result<Program, ParseError>","parse : String -> String -> Result<Program, ParseError>"],"summary":"Parses a Kex source string into a structured AST.","types":["(String) -> Result<Program, ParseError>","(String) -> (String) -> Result<Program, ParseError>"],"urlPath":"parser"},{"anchor":"function-parser-parsefile","kind":"function","line":14,"name":"parseFile","qualifiedName":"Parser.parseFile","signatures":["parseFile : FS.FilePath -> Result<Program, ParseError>"],"summary":"Reads a file and parses it.","types":["(FS.FilePath) -> Result<Program, ParseError>"],"urlPath":"parser"},{"anchor":"function-parser-parsetype","kind":"function","line":17,"name":"parseType","qualifiedName":"Parser.parseType","signatures":["parseType : String -> Result<TypeRef, ParseError>"],"summary":"Parses a type expression string into a TypeRef.","types":["(String) -> Result<TypeRef, ParseError>"],"urlPath":"parser"},{"anchor":"function-parser-parseexpression","kind":"function","line":20,"name":"parseExpression","qualifiedName":"Parser.parseExpression","signatures":["parseExpression : String -> Result<Expression, ParseError>"],"summary":"Parses a single expression string into an Expression AST node.","types":["(String) -> Result<Expression, ParseError>"],"urlPath":"parser"},{"anchor":"type-parser-typeref","kind":"type","line":23,"name":"TypeRef","qualifiedName":"Parser.TypeRef","signatures":[],"summary":"Structured representation of type expressions.","types":["String","[TypeRef]","[TypeRef]","TypeRef","[TypeRef]","TypeRef","TypeRef","TypeRef","[TypeRef]","TypeRef","String"],"urlPath":"parser"},{"anchor":"make-typeref","kind":"make","line":35,"name":"TypeRef","qualifiedName":"TypeRef","signatures":["toString : String"],"summary":"","types":["String"],"urlPath":"parser"},{"anchor":"typeref-tostring","kind":"function","line":37,"name":"toString","qualifiedName":"TypeRef.toString","signatures":["toString : String"],"summary":"Pretty-prints the type reference to a human-readable string.","types":["String"],"urlPath":"parser"},{"anchor":"type-parser-patternref","kind":"type","line":41,"name":"PatternRef","qualifiedName":"Parser.PatternRef","signatures":[],"summary":"Structured representation of patterns.","types":["String","String","String","[PatternRef]","[PatternRef]","[PatternRef]","PatternRef","String"],"urlPath":"parser"},{"anchor":"make-patternref","kind":"make","line":50,"name":"PatternRef","qualifiedName":"PatternRef","signatures":["toString : String"],"summary":"","types":["String"],"urlPath":"parser"},{"anchor":"patternref-tostring","kind":"function","line":52,"name":"toString","qualifiedName":"PatternRef.toString","signatures":["toString : String"],"summary":"Pretty-prints the pattern to a human-readable string.","types":["String"],"urlPath":"parser"},{"anchor":"type-parser-expression","kind":"type","line":56,"name":"Expression","qualifiedName":"Parser.Expression","signatures":[],"summary":"Structured representation of expression AST nodes.","types":["Int","Float","String","[String]","[Expression]","Bool","Atom","String","Expression","String","Expression","String","Expression","Expression","[Expression]","String","[String]","[Expression]","Expression","String","[Expression]","Expression","[Expression]","[Expression]?","Expression","[Expression]","[Expression]","[Expression]","[Expression]","[String]","[Expression]","String","Expression","String","Expression","String","Expression","Expression","Expression","Expression","Expression","Expression","[Expression]","[Expression]","Expression","Expression"],"urlPath":"parser"},{"anchor":"make-range","kind":"make","line":3,"name":"Range","qualifiedName":"Range","signatures":["reduce(acc, f)","contains?(value)","sort(comparator)","join(separator)","at(index, fallback)","take(n)","drop(n)","indexOf(value)","zip(other)","partition(pred)","push(value)","reject(pred)"],"summary":"Range — a range computes everything from its two bounds; `items` materializes the elements into a real list when one is needed.","types":[],"urlPath":"range"},{"anchor":"range-reduce","kind":"function","line":7,"name":"reduce","qualifiedName":"Range.reduce","signatures":["reduce(acc, f)"],"summary":"Shared primitive for Enumerable and Foldable. Range stays structurally minimal; inherited operations reduce over its materialized items in ascending range order.","types":[],"urlPath":"range"},{"anchor":"range-sum","kind":"function","line":11,"name":"sum","qualifiedName":"Range.sum","signatures":[],"summary":"Numeric range aggregates are expressed in terms of the Enumerable primitive rather than relying on the walker's historical List fallback.","types":[],"urlPath":"range"},{"anchor":"range-product","kind":"function","line":12,"name":"product","qualifiedName":"Range.product","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-contains?","kind":"function","line":16,"name":"contains?","qualifiedName":"Range.contains?","signatures":["contains?(value)"],"summary":"Membership is a Range method, not a fallback into the bare String/List native dispatcher.","types":[],"urlPath":"range"},{"anchor":"range-items","kind":"function","line":23,"name":"items","qualifiedName":"Range.items","signatures":[],"summary":"The range's elements as a list.","types":[],"urlPath":"range"},{"anchor":"range-first","kind":"function","line":31,"name":"first","qualifiedName":"Range.first","signatures":[],"summary":"The list operations, over the materialized items. A range is an ordered collection, so `(1..5).first` and `(1..5).length` are questions it can answer — and on the BEAM backend, where a range IS its item list, they already worked. Only the walker rejected them (\"Undefined method: first for Range\"), so every one of these was a backend divergence rather than a deliberate restriction.","types":[],"urlPath":"range"},{"anchor":"range-second","kind":"function","line":32,"name":"second","qualifiedName":"Range.second","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-third","kind":"function","line":33,"name":"third","qualifiedName":"Range.third","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-last","kind":"function","line":34,"name":"last","qualifiedName":"Range.last","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-rest","kind":"function","line":35,"name":"rest","qualifiedName":"Range.rest","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-length","kind":"function","line":36,"name":"length","qualifiedName":"Range.length","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-count","kind":"function","line":37,"name":"count","qualifiedName":"Range.count","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-empty?","kind":"function","line":38,"name":"empty?","qualifiedName":"Range.empty?","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-max","kind":"function","line":39,"name":"max","qualifiedName":"Range.max","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-min","kind":"function","line":40,"name":"min","qualifiedName":"Range.min","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-reverse","kind":"function","line":41,"name":"reverse","qualifiedName":"Range.reverse","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-sort","kind":"function","line":42,"name":"sort","qualifiedName":"Range.sort","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-sort","kind":"function","line":43,"name":"sort","qualifiedName":"Range.sort","signatures":["sort(comparator)"],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-uniq","kind":"function","line":44,"name":"uniq","qualifiedName":"Range.uniq","signatures":[],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-join","kind":"function","line":45,"name":"join","qualifiedName":"Range.join","signatures":["join(separator)"],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-at","kind":"function","line":46,"name":"at","qualifiedName":"Range.at","signatures":["at(index, fallback)"],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-take","kind":"function","line":48,"name":"take","qualifiedName":"Range.take","signatures":["take(n)"],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-drop","kind":"function","line":49,"name":"drop","qualifiedName":"Range.drop","signatures":["drop(n)"],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-indexof","kind":"function","line":50,"name":"indexOf","qualifiedName":"Range.indexOf","signatures":["indexOf(value)"],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-zip","kind":"function","line":51,"name":"zip","qualifiedName":"Range.zip","signatures":["zip(other)"],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-partition","kind":"function","line":52,"name":"partition","qualifiedName":"Range.partition","signatures":["partition(pred)"],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-push","kind":"function","line":53,"name":"push","qualifiedName":"Range.push","signatures":["push(value)"],"summary":"","types":[],"urlPath":"range"},{"anchor":"range-reject","kind":"function","line":54,"name":"reject","qualifiedName":"Range.reject","signatures":["reject(pred)"],"summary":"","types":[],"urlPath":"range"},{"anchor":"module-stream","kind":"module","line":1,"name":"Stream","qualifiedName":"Stream","signatures":["Sequence(from: A, step: (A -> A)) -> Stream<A>","Iterate(seed: A, step) -> Stream<A>"],"summary":"","types":[],"urlPath":"stream"},{"anchor":"function-stream-sequence","kind":"function","line":15,"name":"Sequence","qualifiedName":"Stream.Sequence","signatures":["Sequence(from: A, step: (A -> A)) -> Stream<A>"],"summary":"Creates an infinite stream starting at `from`, applying `step` to produce each successive element.","types":[],"urlPath":"stream"},{"anchor":"function-stream-iterate","kind":"function","line":28,"name":"Iterate","qualifiedName":"Stream.Iterate","signatures":["Iterate(seed: A, step) -> Stream<A>"],"summary":"Creates an infinite stream seeded with `seed`, applying `f` to each element to produce the next. Equivalent to `Sequence`; use whichever reads more clearly at the call site.","types":[],"urlPath":"stream"},{"anchor":"make-stream","kind":"make","line":31,"name":"Stream<A>","qualifiedName":"Stream<A>","signatures":["take(n: Integer) -> [A]","drop(n: Integer) -> Stream<A>","map(f: (A -> B)) -> Stream<B>","filter(pred: (A -> Bool)) -> Stream<A>"],"summary":"","types":["Integer","[A]","Stream<A>","(A) -> B","Stream<B>","(A) -> Bool"],"urlPath":"stream"},{"anchor":"stream-take","kind":"function","line":40,"name":"take","qualifiedName":"Stream.take","signatures":["take(n: Integer) -> [A]"],"summary":"Returns the first `n` elements as a list. Evaluates the stream up to that point.","types":["Integer","[A]"],"urlPath":"stream"},{"anchor":"stream-drop","kind":"function","line":50,"name":"drop","qualifiedName":"Stream.drop","signatures":["drop(n: Integer) -> Stream<A>"],"summary":"Skips the first `n` elements and returns a new stream offset by `n`.","types":["Integer","Stream<A>"],"urlPath":"stream"},{"anchor":"stream-map","kind":"function","line":61,"name":"map","qualifiedName":"Stream.map","signatures":["map(f: (A -> B)) -> Stream<B>"],"summary":"Returns a new stream applying `f` to each element.","types":["(A) -> B","Stream<B>"],"urlPath":"stream"},{"anchor":"stream-filter","kind":"function","line":73,"name":"filter","qualifiedName":"Stream.filter","signatures":["filter(pred: (A -> Bool)) -> Stream<A>"],"summary":"Returns a new stream keeping only elements for which `pred` is `true`. Note: consuming `n` elements may require evaluating many upstream elements.","types":["(A) -> Bool","Stream<A>"],"urlPath":"stream"},{"anchor":"module-taggedvalidation","kind":"module","line":3,"name":"TaggedValidation","qualifiedName":"TaggedValidation","signatures":["fatal(message: String) -> Issue","fatalAt(offset: Integer, message: String) -> Issue","fatalBetween : Integer -> Integer -> String -> Issue","warn(message: String) -> Issue","warnAt(offset: Integer, message: String) -> Issue","warnBetween : Integer -> Integer -> String -> Issue"],"summary":"Diagnostics returned by optional compile-time tagged-literal validators. Byte offsets are zero-based and relative to the cooked literal body.","types":["Integer","ByteSpan?","String","Issue","(Integer) -> (Integer) -> (String) -> Issue"],"urlPath":"taggedvalidation"},{"anchor":"type-taggedvalidation-bytespan","kind":"type","line":5,"name":"ByteSpan","qualifiedName":"TaggedValidation.ByteSpan","signatures":[],"summary":"","types":["Integer","Integer","Integer"],"urlPath":"taggedvalidation"},{"anchor":"type-taggedvalidation-issue","kind":"type","line":7,"name":"Issue","qualifiedName":"TaggedValidation.Issue","signatures":[],"summary":"","types":["ByteSpan?","String","ByteSpan?","String"],"urlPath":"taggedvalidation"},{"anchor":"function-taggedvalidation-fatal","kind":"function","line":10,"name":"fatal","qualifiedName":"TaggedValidation.fatal","signatures":["fatal(message: String) -> Issue"],"summary":"","types":["String","Issue"],"urlPath":"taggedvalidation"},{"anchor":"function-taggedvalidation-fatalat","kind":"function","line":13,"name":"fatalAt","qualifiedName":"TaggedValidation.fatalAt","signatures":["fatalAt(offset: Integer, message: String) -> Issue"],"summary":"","types":["Integer","String","Issue"],"urlPath":"taggedvalidation"},{"anchor":"function-taggedvalidation-fatalbetween","kind":"function","line":16,"name":"fatalBetween","qualifiedName":"TaggedValidation.fatalBetween","signatures":["fatalBetween : Integer -> Integer -> String -> Issue"],"summary":"","types":["(Integer) -> (Integer) -> (String) -> Issue"],"urlPath":"taggedvalidation"},{"anchor":"function-taggedvalidation-warn","kind":"function","line":21,"name":"warn","qualifiedName":"TaggedValidation.warn","signatures":["warn(message: String) -> Issue"],"summary":"","types":["String","Issue"],"urlPath":"taggedvalidation"},{"anchor":"function-taggedvalidation-warnat","kind":"function","line":24,"name":"warnAt","qualifiedName":"TaggedValidation.warnAt","signatures":["warnAt(offset: Integer, message: String) -> Issue"],"summary":"","types":["Integer","String","Issue"],"urlPath":"taggedvalidation"},{"anchor":"function-taggedvalidation-warnbetween","kind":"function","line":27,"name":"warnBetween","qualifiedName":"TaggedValidation.warnBetween","signatures":["warnBetween : Integer -> Integer -> String -> Issue"],"summary":"","types":["(Integer) -> (Integer) -> (String) -> Issue"],"urlPath":"taggedvalidation"},{"anchor":"function-describe","kind":"function","line":37,"name":"describe","qualifiedName":"describe","signatures":["describe(label: String, block: Block<Void>) -> Void"],"summary":"Groups related test cases under a label. Calls the block immediately. `describe` blocks may be nested. This is a foul function — it prints output.","types":["(String) -> (Block<Void>) -> Void"],"urlPath":"test"},{"anchor":"function-it","kind":"function","line":52,"name":"it","qualifiedName":"it","signatures":["it(label: String, block: Block<Void>) -> Void"],"summary":"Defines a single test case. The block is run and any exception thrown inside it (typically a failed `assert`) marks the test failed without aborting the rest of the suite. This is a foul function — it prints output.","types":["(String) -> (Block<Void>) -> Void"],"urlPath":"test"},{"anchor":"function-before","kind":"function","line":57,"name":"before","qualifiedName":"before","signatures":["before : Block<Void> -> Void"],"summary":"Registers setup for the current group. `before { ... }` and `before(:each) { ... }` run before every test; `before(:all) { ... }` runs once before the group's tests, following RSpec's scope convention.","types":["(Block<Void>) -> Void"],"urlPath":"test"},{"anchor":"function-after","kind":"function","line":62,"name":"after","qualifiedName":"after","signatures":["after : Block<Void> -> Void"],"summary":"Registers cleanup for the current group. `after { ... }` defaults to `:each`; `after(:all) { ... }` runs once when the group finishes. Cleanup is unconditional, and inner per-test hooks run before outer hooks.","types":["(Block<Void>) -> Void"],"urlPath":"test"},{"anchor":"function-assert","kind":"function","line":74,"name":"assert","qualifiedName":"assert","signatures":["assert : Bool -> Bool","assert(value: Bool, message: String) -> Bool"],"summary":"Throws a runtime error if `value` is falsy, failing the enclosing `it`. The optional `message` is included in the failure output.","types":["(Bool) -> Bool","(Bool) -> (String) -> Bool"],"urlPath":"test"},{"anchor":"module-assert","kind":"module","line":79,"name":"Assert","qualifiedName":"Assert","signatures":["equal(actual, expected)","notEqual(actual, expected)","truthy(value)","falsy(value)","some(value)","none(value)","ok(value)","error(value)"],"summary":"Focused assertions are ordinary Kex stdlib functions layered on the primitive `assert`, so adding another helper does not require compiler or runtime work.","types":[],"urlPath":"test"},{"anchor":"function-assert-equal","kind":"function","line":80,"name":"equal","qualifiedName":"Assert.equal","signatures":["equal(actual, expected)"],"summary":"","types":[],"urlPath":"test"},{"anchor":"function-assert-notequal","kind":"function","line":81,"name":"notEqual","qualifiedName":"Assert.notEqual","signatures":["notEqual(actual, expected)"],"summary":"","types":[],"urlPath":"test"},{"anchor":"function-assert-truthy","kind":"function","line":83,"name":"truthy","qualifiedName":"Assert.truthy","signatures":["truthy(value)"],"summary":"","types":[],"urlPath":"test"},{"anchor":"function-assert-falsy","kind":"function","line":84,"name":"falsy","qualifiedName":"Assert.falsy","signatures":["falsy(value)"],"summary":"","types":[],"urlPath":"test"},{"anchor":"function-assert-some","kind":"function","line":85,"name":"some","qualifiedName":"Assert.some","signatures":["some(value)"],"summary":"","types":[],"urlPath":"test"},{"anchor":"function-assert-none","kind":"function","line":86,"name":"none","qualifiedName":"Assert.none","signatures":["none(value)"],"summary":"","types":[],"urlPath":"test"},{"anchor":"function-assert-ok","kind":"function","line":87,"name":"ok","qualifiedName":"Assert.ok","signatures":["ok(value)"],"summary":"","types":[],"urlPath":"test"},{"anchor":"function-assert-error","kind":"function","line":88,"name":"error","qualifiedName":"Assert.error","signatures":["error(value)"],"summary":"","types":[],"urlPath":"test"},{"anchor":"trait-truthyable","kind":"trait","line":6,"name":"Truthyable","qualifiedName":"Truthyable","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"truthyable-truthy?","kind":"function","line":7,"name":"truthy?","qualifiedName":"Truthyable.truthy?","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"make-bool","kind":"make","line":11,"name":"Bool","qualifiedName":"Bool","signatures":["truthy? : Bool"],"summary":"","types":[],"urlPath":"truthyable"},{"anchor":"bool-truthy?","kind":"function","line":12,"name":"truthy?","qualifiedName":"Bool.truthy?","signatures":["truthy? : Bool"],"summary":"","types":[],"urlPath":"truthyable"},{"anchor":"make-integer","kind":"make","line":16,"name":"Integer","qualifiedName":"Integer","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"integer-truthy?","kind":"function","line":17,"name":"truthy?","qualifiedName":"Integer.truthy?","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"make-float","kind":"make","line":21,"name":"Float","qualifiedName":"Float","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"float-truthy?","kind":"function","line":22,"name":"truthy?","qualifiedName":"Float.truthy?","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"make-string","kind":"make","line":26,"name":"String","qualifiedName":"String","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"string-truthy?","kind":"function","line":27,"name":"truthy?","qualifiedName":"String.truthy?","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"make-optional","kind":"make","line":31,"name":"Optional<X>","qualifiedName":"Optional<X>","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"optional-truthy?","kind":"function","line":32,"name":"truthy?","qualifiedName":"Optional.truthy?","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"make-list","kind":"make","line":37,"name":"[X]","qualifiedName":"[X]","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"list-truthy?","kind":"function","line":38,"name":"truthy?","qualifiedName":"List.truthy?","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"make-map","kind":"make","line":42,"name":"Map<K, V>","qualifiedName":"Map<K, V>","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"map-truthy?","kind":"function","line":43,"name":"truthy?","qualifiedName":"Map.truthy?","signatures":["truthy? : Bool"],"summary":"","types":["Bool"],"urlPath":"truthyable"},{"anchor":"module-web","kind":"module","line":5,"name":"Web","qualifiedName":"Web","signatures":["text(body: String) -> Response","textWithStatus(body: String, status: Integer) -> Response","html(body: String) -> Response","json(body: String) -> Response","redirect(location: String) -> Response","new(port: Integer) -> Server","mount(path: String, handler: Handler) -> Server","get(path: String, handler: Handler) -> Server","post(path: String, handler: Handler) -> Server","put(path: String, handler: Handler) -> Server","patch(path: String, handler: Handler) -> Server","delete(path: String, handler: Handler) -> Server","start : Result<Void, String>"],"summary":"","types":["String","Map<String, String>","Integer","Response","Handler","[Route]","Server","Result<Void, String>"],"urlPath":"webserver"},{"anchor":"record-web-request","kind":"record","line":6,"name":"Request","qualifiedName":"Web.Request","signatures":[],"summary":"","types":["String","Map<String, String>"],"urlPath":"webserver"},{"anchor":"record-web-response","kind":"record","line":15,"name":"Response","qualifiedName":"Web.Response","signatures":[],"summary":"","types":["Integer","Map<String, String>","String"],"urlPath":"webserver"},{"anchor":"module-web-response","kind":"module","line":21,"name":"Web.Response","qualifiedName":"Web.Response","signatures":["text(body: String) -> Response","textWithStatus(body: String, status: Integer) -> Response","html(body: String) -> Response","json(body: String) -> Response","redirect(location: String) -> Response"],"summary":"","types":["String","Response","Integer"],"urlPath":"webserver"},{"anchor":"function-web-response-text","kind":"function","line":22,"name":"text","qualifiedName":"Web.Response.text","signatures":["text(body: String) -> Response"],"summary":"","types":["String","Response"],"urlPath":"webserver"},{"anchor":"function-web-response-textwithstatus","kind":"function","line":30,"name":"textWithStatus","qualifiedName":"Web.Response.textWithStatus","signatures":["textWithStatus(body: String, status: Integer) -> Response"],"summary":"","types":["String","Integer","Response"],"urlPath":"webserver"},{"anchor":"function-web-response-html","kind":"function","line":38,"name":"html","qualifiedName":"Web.Response.html","signatures":["html(body: String) -> Response"],"summary":"","types":["String","Response"],"urlPath":"webserver"},{"anchor":"function-web-response-json","kind":"function","line":46,"name":"json","qualifiedName":"Web.Response.json","signatures":["json(body: String) -> Response"],"summary":"","types":["String","Response"],"urlPath":"webserver"},{"anchor":"function-web-response-redirect","kind":"function","line":54,"name":"redirect","qualifiedName":"Web.Response.redirect","signatures":["redirect(location: String) -> Response"],"summary":"","types":["String","Response"],"urlPath":"webserver"},{"anchor":"constant-web-response-notfound","kind":"constant","line":62,"name":"notFound","qualifiedName":"Web.Response.notFound","signatures":[],"summary":"","types":["Response"],"urlPath":"webserver"},{"anchor":"type-web-handler","kind":"type","line":71,"name":"Handler","qualifiedName":"Web.Handler","signatures":[],"summary":"","types":[],"urlPath":"webserver"},{"anchor":"record-web-route","kind":"record","line":73,"name":"Route","qualifiedName":"Web.Route","signatures":[],"summary":"","types":["String","Handler"],"urlPath":"webserver"},{"anchor":"record-web-server","kind":"record","line":79,"name":"Server","qualifiedName":"Web.Server","signatures":[],"summary":"","types":["Integer","[Route]"],"urlPath":"webserver"},{"anchor":"module-web-server","kind":"module","line":84,"name":"Web.Server","qualifiedName":"Web.Server","signatures":["new(port: Integer) -> Server"],"summary":"","types":["Integer","Server"],"urlPath":"webserver"},{"anchor":"function-web-server-new","kind":"function","line":85,"name":"new","qualifiedName":"Web.Server.new","signatures":["new(port: Integer) -> Server"],"summary":"","types":["Integer","Server"],"urlPath":"webserver"},{"anchor":"make-server","kind":"make","line":90,"name":"Server","qualifiedName":"Server","signatures":["mount(path: String, handler: Handler) -> Server","get(path: String, handler: Handler) -> Server","post(path: String, handler: Handler) -> Server","put(path: String, handler: Handler) -> Server","patch(path: String, handler: Handler) -> Server","delete(path: String, handler: Handler) -> Server","start : Result<Void, String>"],"summary":"","types":["String","Handler","Server","Result<Void, String>"],"urlPath":"webserver"},{"anchor":"server-mount","kind":"function","line":91,"name":"mount","qualifiedName":"Server.mount","signatures":["mount(path: String, handler: Handler) -> Server"],"summary":"","types":["String","Handler","Server"],"urlPath":"webserver"},{"anchor":"server-get","kind":"function","line":96,"name":"get","qualifiedName":"Server.get","signatures":["get(path: String, handler: Handler) -> Server"],"summary":"","types":["String","Handler","Server"],"urlPath":"webserver"},{"anchor":"server-post","kind":"function","line":101,"name":"post","qualifiedName":"Server.post","signatures":["post(path: String, handler: Handler) -> Server"],"summary":"","types":["String","Handler","Server"],"urlPath":"webserver"},{"anchor":"server-put","kind":"function","line":106,"name":"put","qualifiedName":"Server.put","signatures":["put(path: String, handler: Handler) -> Server"],"summary":"","types":["String","Handler","Server"],"urlPath":"webserver"},{"anchor":"server-patch","kind":"function","line":111,"name":"patch","qualifiedName":"Server.patch","signatures":["patch(path: String, handler: Handler) -> Server"],"summary":"","types":["String","Handler","Server"],"urlPath":"webserver"},{"anchor":"server-delete","kind":"function","line":116,"name":"delete","qualifiedName":"Server.delete","signatures":["delete(path: String, handler: Handler) -> Server"],"summary":"","types":["String","Handler","Server"],"urlPath":"webserver"},{"anchor":"server-start","kind":"function","line":121,"name":"start","qualifiedName":"Server.start","signatures":["start : Result<Void, String>"],"summary":"","types":["Result<Void, String>"],"urlPath":"webserver"}],"generatedAt":"2026-09-27T13:33:27.984147994Z","package":"prelude","version":"0.3.3"}