koatl 0.3.8__tar.gz → 0.3.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. {koatl-0.3.8 → koatl-0.3.9}/Cargo.lock +1 -1
  2. {koatl-0.3.8 → koatl-0.3.9}/PKG-INFO +1 -1
  3. {koatl-0.3.8 → koatl-0.3.9}/koatl/Cargo.toml +1 -1
  4. koatl-0.3.9/koatl/python/koatl/prelude/__init__.tl +38 -0
  5. {koatl-0.3.8 → koatl-0.3.9/koatl}/python/koatl/std/data/list.tl +1 -1
  6. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/std/iter.tl +3 -3
  7. koatl-0.3.9/koatl/python/koatl/std/re.tl +41 -0
  8. koatl-0.3.9/python/koatl/prelude/__init__.tl +38 -0
  9. {koatl-0.3.8/koatl → koatl-0.3.9}/python/koatl/std/data/list.tl +1 -1
  10. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/std/iter.tl +3 -3
  11. koatl-0.3.9/python/koatl/std/re.tl +41 -0
  12. koatl-0.3.8/koatl/python/koatl/prelude/__init__.tl +0 -42
  13. koatl-0.3.8/koatl/python/koatl/std/re.tl +0 -48
  14. koatl-0.3.8/python/koatl/prelude/__init__.tl +0 -42
  15. koatl-0.3.8/python/koatl/std/re.tl +0 -48
  16. {koatl-0.3.8 → koatl-0.3.9}/Cargo.toml +0 -0
  17. {koatl-0.3.8 → koatl-0.3.9}/README.md +0 -0
  18. {koatl-0.3.8 → koatl-0.3.9}/koatl/.github/workflows/CI.yml +0 -0
  19. {koatl-0.3.8 → koatl-0.3.9}/koatl/.gitignore +0 -0
  20. {koatl-0.3.8 → koatl-0.3.9}/koatl/LICENSE +0 -0
  21. {koatl-0.3.8 → koatl-0.3.9}/koatl/README.md +0 -0
  22. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/__init__.py +0 -0
  23. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/__main__.py +0 -0
  24. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/cli.py +0 -0
  25. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/notebook/__init__.py +0 -0
  26. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/notebook/magic.py +0 -0
  27. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/runtime/__init__.py +0 -0
  28. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/runtime/meta_finder.py +0 -0
  29. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/runtime/record.py +0 -0
  30. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/runtime/vattr.py +0 -0
  31. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/std/__init__.tl +0 -0
  32. {koatl-0.3.8/koatl/python/koatl/std/alg → koatl-0.3.9/koatl/python/koatl/std/control}/__init__.tl +0 -0
  33. {koatl-0.3.8/koatl/python/koatl/std/alg → koatl-0.3.9/koatl/python/koatl/std/control}/async.tl +0 -0
  34. {koatl-0.3.8/koatl/python/koatl/std/alg → koatl-0.3.9/koatl/python/koatl/std/control}/base.tl +0 -0
  35. {koatl-0.3.8/koatl/python/koatl/std/alg → koatl-0.3.9/koatl/python/koatl/std/control}/do.tl +0 -0
  36. {koatl-0.3.8/koatl/python/koatl/std/alg → koatl-0.3.9/koatl/python/koatl/std/control}/env.tl +0 -0
  37. {koatl-0.3.8/koatl/python/koatl/std/alg → koatl-0.3.9/koatl/python/koatl/std/control}/memo.tl +0 -0
  38. {koatl-0.3.8/koatl/python/koatl/std/alg → koatl-0.3.9/koatl/python/koatl/std/control}/result.tl +0 -0
  39. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/std/data/__init__.tl +0 -0
  40. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/std/data/record.tl +0 -0
  41. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/std/ext.tl +0 -0
  42. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/std/io.tl +0 -0
  43. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/std/json.tl +0 -0
  44. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/std/lazy_module.tl +0 -0
  45. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/std/pickle.tl +0 -0
  46. {koatl-0.3.8 → koatl-0.3.9}/koatl/python/koatl/std/trait.py +0 -0
  47. {koatl-0.3.8 → koatl-0.3.9}/koatl/requirements.txt +0 -0
  48. {koatl-0.3.8 → koatl-0.3.9}/koatl/src/emit_py.rs +0 -0
  49. {koatl-0.3.8 → koatl-0.3.9}/koatl/src/lib.rs +0 -0
  50. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/containers.tl +0 -0
  51. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/data.txt +0 -0
  52. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/decorators.tl +0 -0
  53. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/destructure-for-and-fn.tl +0 -0
  54. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/destructure.tl +0 -0
  55. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/escape_ident.tl +0 -0
  56. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/fstr.tl +0 -0
  57. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/functions.tl +0 -0
  58. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/generator.tl +0 -0
  59. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/if_expr.tl +0 -0
  60. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/loops.tl +0 -0
  61. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/match.tl +0 -0
  62. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/nary-list.tl +0 -0
  63. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/placeholder.tl +0 -0
  64. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/precedence.tl +0 -0
  65. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/scopes.tl +0 -0
  66. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/semantic_whitespace.tl +0 -0
  67. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/short_circuit.tl +0 -0
  68. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/base/with.tl +0 -0
  69. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/async.tl +0 -0
  70. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/aug_assign.tl +0 -0
  71. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/coal.tl +0 -0
  72. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/env.tl +0 -0
  73. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/imports.tl +0 -0
  74. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/iterables.tl +0 -0
  75. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/list.tl +0 -0
  76. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/memo.tl +0 -0
  77. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/record.tl +0 -0
  78. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/result.tl +0 -0
  79. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/slice.tl +0 -0
  80. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/try.tl +0 -0
  81. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/prelude/virtual.tl +0 -0
  82. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/util/__init__.py +0 -0
  83. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/util/module0.tl +0 -0
  84. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/util/module1.tl +0 -0
  85. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/e2e/util/module2.tl +0 -0
  86. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/parse/arith.tl +0 -0
  87. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/parse/assign.tl +0 -0
  88. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/parse/block-comments.tl +0 -0
  89. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/parse/deco.tl +0 -0
  90. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/parse/func.tl +0 -0
  91. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/parse/matches.tl +0 -0
  92. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/parse/numbers.tl +0 -0
  93. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/test_e2e.py +0 -0
  94. {koatl-0.3.8 → koatl-0.3.9}/koatl/tests/test_parse.py +0 -0
  95. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/Cargo.toml +0 -0
  96. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/ast.rs +0 -0
  97. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/ast_builder.rs +0 -0
  98. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/inference.rs +0 -0
  99. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/lib.rs +0 -0
  100. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/lift_cst.rs +0 -0
  101. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/main.rs +0 -0
  102. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/py/ast.rs +0 -0
  103. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/py/ast_builder.rs +0 -0
  104. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/py/emit.rs +0 -0
  105. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/py/mod.rs +0 -0
  106. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/resolve_scopes.rs +0 -0
  107. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/transform.rs +0 -0
  108. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/types.rs +0 -0
  109. {koatl-0.3.8 → koatl-0.3.9}/koatl-core/src/util.rs +0 -0
  110. {koatl-0.3.8 → koatl-0.3.9}/koatl-parser/Cargo.toml +0 -0
  111. {koatl-0.3.8 → koatl-0.3.9}/koatl-parser/src/cst.rs +0 -0
  112. {koatl-0.3.8 → koatl-0.3.9}/koatl-parser/src/lexer.rs +0 -0
  113. {koatl-0.3.8 → koatl-0.3.9}/koatl-parser/src/lib.rs +0 -0
  114. {koatl-0.3.8 → koatl-0.3.9}/koatl-parser/src/parser.rs +0 -0
  115. {koatl-0.3.8 → koatl-0.3.9}/koatl-parser/src/simple_fmt.rs +0 -0
  116. {koatl-0.3.8 → koatl-0.3.9}/pyproject.toml +0 -0
  117. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/__init__.py +0 -0
  118. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/__main__.py +0 -0
  119. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/cli.py +0 -0
  120. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/notebook/__init__.py +0 -0
  121. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/notebook/magic.py +0 -0
  122. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/runtime/__init__.py +0 -0
  123. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/runtime/meta_finder.py +0 -0
  124. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/runtime/record.py +0 -0
  125. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/runtime/vattr.py +0 -0
  126. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/std/__init__.tl +0 -0
  127. {koatl-0.3.8/python/koatl/std/alg → koatl-0.3.9/python/koatl/std/control}/__init__.tl +0 -0
  128. {koatl-0.3.8/python/koatl/std/alg → koatl-0.3.9/python/koatl/std/control}/async.tl +0 -0
  129. {koatl-0.3.8/python/koatl/std/alg → koatl-0.3.9/python/koatl/std/control}/base.tl +0 -0
  130. {koatl-0.3.8/python/koatl/std/alg → koatl-0.3.9/python/koatl/std/control}/do.tl +0 -0
  131. {koatl-0.3.8/python/koatl/std/alg → koatl-0.3.9/python/koatl/std/control}/env.tl +0 -0
  132. {koatl-0.3.8/python/koatl/std/alg → koatl-0.3.9/python/koatl/std/control}/memo.tl +0 -0
  133. {koatl-0.3.8/python/koatl/std/alg → koatl-0.3.9/python/koatl/std/control}/result.tl +0 -0
  134. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/std/data/__init__.tl +0 -0
  135. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/std/data/record.tl +0 -0
  136. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/std/ext.tl +0 -0
  137. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/std/io.tl +0 -0
  138. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/std/json.tl +0 -0
  139. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/std/lazy_module.tl +0 -0
  140. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/std/pickle.tl +0 -0
  141. {koatl-0.3.8 → koatl-0.3.9}/python/koatl/std/trait.py +0 -0
@@ -190,7 +190,7 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
190
190
 
191
191
  [[package]]
192
192
  name = "koatl"
193
- version = "0.3.8"
193
+ version = "0.3.9"
194
194
  dependencies = [
195
195
  "ariadne",
196
196
  "koatl-core",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: koatl
3
- Version: 0.3.8
3
+ Version: 0.3.9
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "koatl"
3
- version = "0.3.8"
3
+ version = "0.3.9"
4
4
  edition = "2021"
5
5
 
6
6
  [lib]
@@ -0,0 +1,38 @@
1
+ export import koatl.std.(
2
+ trait.*
3
+ ext.*
4
+ data.*
5
+ iter.*
6
+ control.(Result, Ok, Err, Env, Memo, Async, AsyncMemo, do)
7
+ )
8
+
9
+ import koatl.std.(
10
+ re.Pattern
11
+ lazy_module.(LazyModule, RootModulesProxy)
12
+ )
13
+
14
+ export std = LazyModule("koatl.std")
15
+ export mod = RootModulesProxy()
16
+
17
+ Extension.trait(Iterable)
18
+
19
+ Extension.property(list, "len")! List.len.fget
20
+
21
+ Extension.property(object, "result")! self => Result(self)
22
+
23
+ Extension.method(str, "match")! (regex, str) => Pattern(regex).match(str)
24
+ Extension.method(str, "matches")! (str, regex) => Pattern(regex).match(str)
25
+
26
+ __tl__.do = koatl.std.control.do.do
27
+
28
+ __tl__.op_map = koatl.std.control.result.op_map
29
+ __tl__.op_coal = koatl.std.control.result.op_coal
30
+
31
+ __tl__.Ok = koatl.std.control.result.Ok
32
+ __tl__.Err = koatl.std.control.result.Err
33
+ __tl__.Result = koatl.std.control.result.Result
34
+
35
+ __tl__.MatchError = koatl.std.MatchError
36
+
37
+ __tl__.memo_value = koatl.std.control.memo.Memo.value
38
+ __tl__.async_memo_value = koatl.std.control.memo.AsyncMemo.value
@@ -1,6 +1,6 @@
1
1
  import itertools
2
2
 
3
- import koatl.std.alg.Monad
3
+ import koatl.std.control.Monad
4
4
 
5
5
  export List = class(Monad):
6
6
  __new__ = (cls, *args, **kwargs) => raise ValueError(
@@ -3,14 +3,14 @@ import builtins
3
3
 
4
4
  import koatl.std.data.Record
5
5
  import koatl.std.trait.Trait
6
- import .alg.(Traversable, Ok, Err, Memo, Async, AsyncMemo, Result)
6
+ import .control.(Traversable, Ok, Err, Memo, Async, AsyncMemo, Result)
7
7
 
8
8
  export Iterable = class(Traversable, Trait):
9
9
  iter = Trait.abstract! self => None
10
10
 
11
11
  skip = (self, n) =>
12
12
  let it = self.iter
13
- for _ in ..n:
13
+ for _ in..n:
14
14
  next(it, None)
15
15
  it
16
16
 
@@ -27,7 +27,7 @@ export Iterable = class(Traversable, Trait):
27
27
  take = (self, n) =>
28
28
  let impl = () =>
29
29
  let it = self.iter
30
- for _ in ..n:
30
+ for _ in..n:
31
31
  try:
32
32
  yield next(it)
33
33
  except StopIteration(value=value) =>
@@ -0,0 +1,41 @@
1
+ import re
2
+ import collections
3
+ import .control.Result
4
+
5
+ export Pattern = class:
6
+ __slots__ = ("pattern",)
7
+
8
+ __init__ = (self, pattern) =>
9
+ pattern match:
10
+ re.Pattern() => self.pattern = pattern
11
+ str() => self.pattern = re.compile(pattern)
12
+ Pattern(pattern=pattern) => self.pattern = pattern
13
+ default => raise TypeError(
14
+ f"Expected a str or pattern, but got {type(pattern).__name__}"
15
+ )
16
+
17
+ __repr__ = self => f"Pattern({self.pattern})"
18
+
19
+ match = (self, string, flags=0) =>
20
+ if not isinstance(string, str):
21
+ raise TypeError(f"Expected a string, but got {type(string).__name__}")
22
+
23
+ self.pattern.match(string, flags).result.map(Match)
24
+
25
+ export Match = collections.abc.Sequence.register! class:
26
+ __slots__ = ("_match",)
27
+ __match_args__ = ("match",)
28
+
29
+ __init__ = (self, match) =>
30
+ if not isinstance(match, re.Match):
31
+ raise TypeError(f"Expected a re.Match, but got {type(match).__name__}")
32
+
33
+ self._match = match
34
+
35
+ __iter__ = self => iter(self._match.groups())
36
+ __len__ = self => len(self._match.groups())
37
+ __getitem__ = (self, index) => self._match[index]
38
+
39
+ match = property! self => self._match.group(0)
40
+
41
+ __repr__ = self => f"Match({self._match})"
@@ -0,0 +1,38 @@
1
+ export import koatl.std.(
2
+ trait.*
3
+ ext.*
4
+ data.*
5
+ iter.*
6
+ control.(Result, Ok, Err, Env, Memo, Async, AsyncMemo, do)
7
+ )
8
+
9
+ import koatl.std.(
10
+ re.Pattern
11
+ lazy_module.(LazyModule, RootModulesProxy)
12
+ )
13
+
14
+ export std = LazyModule("koatl.std")
15
+ export mod = RootModulesProxy()
16
+
17
+ Extension.trait(Iterable)
18
+
19
+ Extension.property(list, "len")! List.len.fget
20
+
21
+ Extension.property(object, "result")! self => Result(self)
22
+
23
+ Extension.method(str, "match")! (regex, str) => Pattern(regex).match(str)
24
+ Extension.method(str, "matches")! (str, regex) => Pattern(regex).match(str)
25
+
26
+ __tl__.do = koatl.std.control.do.do
27
+
28
+ __tl__.op_map = koatl.std.control.result.op_map
29
+ __tl__.op_coal = koatl.std.control.result.op_coal
30
+
31
+ __tl__.Ok = koatl.std.control.result.Ok
32
+ __tl__.Err = koatl.std.control.result.Err
33
+ __tl__.Result = koatl.std.control.result.Result
34
+
35
+ __tl__.MatchError = koatl.std.MatchError
36
+
37
+ __tl__.memo_value = koatl.std.control.memo.Memo.value
38
+ __tl__.async_memo_value = koatl.std.control.memo.AsyncMemo.value
@@ -1,6 +1,6 @@
1
1
  import itertools
2
2
 
3
- import koatl.std.alg.Monad
3
+ import koatl.std.control.Monad
4
4
 
5
5
  export List = class(Monad):
6
6
  __new__ = (cls, *args, **kwargs) => raise ValueError(
@@ -3,14 +3,14 @@ import builtins
3
3
 
4
4
  import koatl.std.data.Record
5
5
  import koatl.std.trait.Trait
6
- import .alg.(Traversable, Ok, Err, Memo, Async, AsyncMemo, Result)
6
+ import .control.(Traversable, Ok, Err, Memo, Async, AsyncMemo, Result)
7
7
 
8
8
  export Iterable = class(Traversable, Trait):
9
9
  iter = Trait.abstract! self => None
10
10
 
11
11
  skip = (self, n) =>
12
12
  let it = self.iter
13
- for _ in ..n:
13
+ for _ in..n:
14
14
  next(it, None)
15
15
  it
16
16
 
@@ -27,7 +27,7 @@ export Iterable = class(Traversable, Trait):
27
27
  take = (self, n) =>
28
28
  let impl = () =>
29
29
  let it = self.iter
30
- for _ in ..n:
30
+ for _ in..n:
31
31
  try:
32
32
  yield next(it)
33
33
  except StopIteration(value=value) =>
@@ -0,0 +1,41 @@
1
+ import re
2
+ import collections
3
+ import .control.Result
4
+
5
+ export Pattern = class:
6
+ __slots__ = ("pattern",)
7
+
8
+ __init__ = (self, pattern) =>
9
+ pattern match:
10
+ re.Pattern() => self.pattern = pattern
11
+ str() => self.pattern = re.compile(pattern)
12
+ Pattern(pattern=pattern) => self.pattern = pattern
13
+ default => raise TypeError(
14
+ f"Expected a str or pattern, but got {type(pattern).__name__}"
15
+ )
16
+
17
+ __repr__ = self => f"Pattern({self.pattern})"
18
+
19
+ match = (self, string, flags=0) =>
20
+ if not isinstance(string, str):
21
+ raise TypeError(f"Expected a string, but got {type(string).__name__}")
22
+
23
+ self.pattern.match(string, flags).result.map(Match)
24
+
25
+ export Match = collections.abc.Sequence.register! class:
26
+ __slots__ = ("_match",)
27
+ __match_args__ = ("match",)
28
+
29
+ __init__ = (self, match) =>
30
+ if not isinstance(match, re.Match):
31
+ raise TypeError(f"Expected a re.Match, but got {type(match).__name__}")
32
+
33
+ self._match = match
34
+
35
+ __iter__ = self => iter(self._match.groups())
36
+ __len__ = self => len(self._match.groups())
37
+ __getitem__ = (self, index) => self._match[index]
38
+
39
+ match = property! self => self._match.group(0)
40
+
41
+ __repr__ = self => f"Match({self._match})"
@@ -1,42 +0,0 @@
1
- export import koatl.std.(
2
- trait.*
3
- ext.*
4
- data.*
5
- iter.*
6
- alg.(Result, Ok, Err, Env, Memo, Async, AsyncMemo)
7
- alg.do
8
- )
9
-
10
- import koatl.std.(
11
- re.Pattern
12
- lazy_module.(LazyModule, RootModulesProxy)
13
- )
14
-
15
- export std = LazyModule("koatl.std")
16
- export mod = RootModulesProxy()
17
-
18
- Extension.trait(Iterable)
19
-
20
- Extension.property(list, "len")! List.len.fget
21
-
22
- Extension.property(object, "result")! self => Result(self)
23
-
24
- Extension.method(str, "match")! (regex, str) => Pattern(regex).match(str)
25
-
26
- # Note: the below methods have arguments in reverse order to Python's re module.
27
- Extension.method(str, "matches")! (str, regex) => Pattern(regex).match(str)
28
- Extension.method(str, "search")! (str, regex) => Pattern(regex).search(str)
29
-
30
- __tl__.do = koatl.std.alg.do.do
31
-
32
- __tl__.op_map = koatl.std.alg.result.op_map
33
- __tl__.op_coal = koatl.std.alg.result.op_coal
34
-
35
- __tl__.Ok = koatl.std.alg.result.Ok
36
- __tl__.Err = koatl.std.alg.result.Err
37
- __tl__.Result = koatl.std.alg.result.Result
38
-
39
- __tl__.MatchError = koatl.std.MatchError
40
-
41
- __tl__.memo_value = koatl.std.alg.memo.Memo.value
42
- __tl__.async_memo_value = koatl.std.alg.memo.AsyncMemo.value
@@ -1,48 +0,0 @@
1
- import re
2
- import collections
3
- import .alg.Result
4
-
5
- export Pattern = class:
6
- __slots__ = ("pattern",)
7
-
8
- __init__ = (self, pattern) =>
9
- pattern match:
10
- re.Pattern() => self.pattern = pattern
11
- str() => self.pattern = re.compile(pattern)
12
- Regex(pattern=pattern) => self.pattern = pattern
13
- default => raise TypeError(
14
- f"Expected a str or pattern, but got {type(pattern).__name__}"
15
- )
16
-
17
- __repr__ = self => f"Regex({self.pattern})"
18
-
19
- match = (self, string) =>
20
- if not isinstance(string, str):
21
- raise TypeError(f"Expected a string, but got {type(string).__name__}")
22
-
23
- self.pattern.match(string).result.map(Regex.Match)
24
-
25
- search = (self, string) =>
26
- if not isinstance(string, str):
27
- raise TypeError(f"Expected a string, but got {type(string).__name__}")
28
-
29
- self.pattern.search(string).result.map(Regex.Match)
30
-
31
-
32
- Match = collections.abc.Sequence.register! class:
33
- __slots__ = ("_match",)
34
- __match_args__ = ("match",)
35
-
36
- __init__ = (self, match) =>
37
- if not isinstance(match, re.Match):
38
- raise TypeError(f"Expected a re.Match, but got {type(match).__name__}")
39
-
40
- self._match = match
41
-
42
- __iter__ = self => iter(self._match.groups())
43
- __len__ = self => len(self._match.groups())
44
- __getitem__ = (self, index) => self._match[index]
45
-
46
- match = property! self => self._match.group(0)
47
-
48
- __repr__ = self => f"Match({self._match})"
@@ -1,42 +0,0 @@
1
- export import koatl.std.(
2
- trait.*
3
- ext.*
4
- data.*
5
- iter.*
6
- alg.(Result, Ok, Err, Env, Memo, Async, AsyncMemo)
7
- alg.do
8
- )
9
-
10
- import koatl.std.(
11
- re.Pattern
12
- lazy_module.(LazyModule, RootModulesProxy)
13
- )
14
-
15
- export std = LazyModule("koatl.std")
16
- export mod = RootModulesProxy()
17
-
18
- Extension.trait(Iterable)
19
-
20
- Extension.property(list, "len")! List.len.fget
21
-
22
- Extension.property(object, "result")! self => Result(self)
23
-
24
- Extension.method(str, "match")! (regex, str) => Pattern(regex).match(str)
25
-
26
- # Note: the below methods have arguments in reverse order to Python's re module.
27
- Extension.method(str, "matches")! (str, regex) => Pattern(regex).match(str)
28
- Extension.method(str, "search")! (str, regex) => Pattern(regex).search(str)
29
-
30
- __tl__.do = koatl.std.alg.do.do
31
-
32
- __tl__.op_map = koatl.std.alg.result.op_map
33
- __tl__.op_coal = koatl.std.alg.result.op_coal
34
-
35
- __tl__.Ok = koatl.std.alg.result.Ok
36
- __tl__.Err = koatl.std.alg.result.Err
37
- __tl__.Result = koatl.std.alg.result.Result
38
-
39
- __tl__.MatchError = koatl.std.MatchError
40
-
41
- __tl__.memo_value = koatl.std.alg.memo.Memo.value
42
- __tl__.async_memo_value = koatl.std.alg.memo.AsyncMemo.value
@@ -1,48 +0,0 @@
1
- import re
2
- import collections
3
- import .alg.Result
4
-
5
- export Pattern = class:
6
- __slots__ = ("pattern",)
7
-
8
- __init__ = (self, pattern) =>
9
- pattern match:
10
- re.Pattern() => self.pattern = pattern
11
- str() => self.pattern = re.compile(pattern)
12
- Regex(pattern=pattern) => self.pattern = pattern
13
- default => raise TypeError(
14
- f"Expected a str or pattern, but got {type(pattern).__name__}"
15
- )
16
-
17
- __repr__ = self => f"Regex({self.pattern})"
18
-
19
- match = (self, string) =>
20
- if not isinstance(string, str):
21
- raise TypeError(f"Expected a string, but got {type(string).__name__}")
22
-
23
- self.pattern.match(string).result.map(Regex.Match)
24
-
25
- search = (self, string) =>
26
- if not isinstance(string, str):
27
- raise TypeError(f"Expected a string, but got {type(string).__name__}")
28
-
29
- self.pattern.search(string).result.map(Regex.Match)
30
-
31
-
32
- Match = collections.abc.Sequence.register! class:
33
- __slots__ = ("_match",)
34
- __match_args__ = ("match",)
35
-
36
- __init__ = (self, match) =>
37
- if not isinstance(match, re.Match):
38
- raise TypeError(f"Expected a re.Match, but got {type(match).__name__}")
39
-
40
- self._match = match
41
-
42
- __iter__ = self => iter(self._match.groups())
43
- __len__ = self => len(self._match.groups())
44
- __getitem__ = (self, index) => self._match[index]
45
-
46
- match = property! self => self._match.group(0)
47
-
48
- __repr__ = self => f"Match({self._match})"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes