1
1
mirror of https://github.com/anoma/juvix.git synced 2024-12-02 10:47:32 +03:00
juvix/tests/negative
Łukasz Czajka e9284b3ef6
Iterator syntax (#2126)
* Closes #1992 

A function identifier `fun` can be declared as an iterator with
```
syntax iterator fun;
```
For example:
```haskell
syntax iterator for;
for : {A B : Type} -> (A -> B -> A) -> A -> List B -> List A;
for f acc nil := acc;
for f acc (x :: xs) := for (f acc x) xs;
```
Iterator application syntax allows for a finite number of initializers
`acc := a` followed by a finite number of ranges `x in xs`. For example:
```
for (acc := 0) (x in lst) acc + x
```
The number of initializers plus the number of ranges must be non-zero.

An iterator application
```
fun (acc1 := a1; ..; accn := an) (x1 in b1; ..; xk in bk) body
```
gets desugared to
```
fun \{acc1 .. accn x1 .. xk := body} a1 .. an b1 .. bk
```
The `acc1`, ..., `accn`, `x1`, ..., `xk` can be patterns.

The desugaring works on a purely syntactic level. Without further
restrictions, it is not checked if the number of initializers/ranges
matches the type of the identifier. The restrictions on the number of
initializers/ranges can be specified in iterator declaration:
```
syntax iterator fun {init: n, range: k};
syntax iterator for {init: 1, range: 1};
syntax iterator map {init: 0, range: 1};
```
The attributes (`init`, `range`) in between braces are parsed as YAML to
avoid inventing and parsing a new attribute language. Both attributes
are optional.
2023-05-30 15:30:11 +02:00
..
230 Iterator syntax (#2126) 2023-05-30 15:30:11 +02:00
258 Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
265 Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
BindGroupConflict Change syntax for ind. data types and forbid the empty data type (#1684) 2023-01-03 13:49:04 +01:00
Dependencies Fix dependencies suggestion in missing module error (#2024) 2023-04-22 18:15:38 +01:00
ImportCycle Rename MiniJuvix to Juvix (#259) 2022-07-08 13:59:45 +02:00
Internal Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
issue1337 Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
issue1344 Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
issue1700 Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
NoDependencies Fix dependencies suggestion in missing module error (#2024) 2023-04-22 18:15:38 +01:00
StdlibConflict Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
Termination Add VampIR to the CI (#2096) 2023-05-22 19:49:36 +02:00
UsingHiding Scope check symbols inside using {..} and hiding {..} (#2108) 2023-05-22 11:41:13 +02:00
AmbiguousConstructor.juvix Change syntax for ind. data types and forbid the empty data type (#1684) 2023-01-03 13:49:04 +01:00
AmbiguousExport.juvix Change syntax for ind. data types and forbid the empty data type (#1684) 2023-01-03 13:49:04 +01:00
AmbiguousModule.juvix Rename MiniJuvix to Juvix (#259) 2022-07-08 13:59:45 +02:00
AmbiguousSymbol.juvix Change syntax for ind. data types and forbid the empty data type (#1684) 2023-01-03 13:49:04 +01:00
AppLeftImplicit.juvix Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
AsPatternAlias.juvix Improve As-Pattern parsing (#1603) 2022-11-03 10:02:22 +01:00
ConstructorExpectedLeftApplication.juvix Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
DanglingJudoc.juvix Add dangling judoc error (#2099) 2023-05-16 15:39:43 +02:00
DuplicateClause.juvix Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
DuplicateFixity.juvix Add syntax keyword (#2107) 2023-05-22 12:50:07 +02:00
DuplicateInductiveParameterName.juvix Change syntax for ind. data types and forbid the empty data type (#1684) 2023-01-03 13:49:04 +01:00
ImplicitPatternLeftApplication.juvix Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
InfixError.juvix Add syntax keyword (#2107) 2023-05-22 12:50:07 +02:00
InfixErrorP.juvix Add syntax keyword (#2107) 2023-05-22 12:50:07 +02:00
Iterators1.juvix Iterator syntax (#2126) 2023-05-30 15:30:11 +02:00
Iterators2.juvix Iterator syntax (#2126) 2023-05-30 15:30:11 +02:00
Iterators3.juvix Iterator syntax (#2126) 2023-05-30 15:30:11 +02:00
Iterators4.juvix Iterator syntax (#2126) 2023-05-30 15:30:11 +02:00
Iterators5.juvix Iterator syntax (#2126) 2023-05-30 15:30:11 +02:00
juvix.yaml Rename MiniJuvix to Juvix (#259) 2022-07-08 13:59:45 +02:00
LacksFunctionClause.juvix Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
LacksTypeSig2.juvix Allow shadowing local variables with let function definitions (#1847) 2023-02-22 10:26:54 +01:00
LacksTypeSig.juvix remove ≔ from the language and replace it by := (#1563) 2022-09-30 10:55:32 +10:00
LetMissingClause.juvix Fix Makefile target bugs for formatting and type Checking Juvix files (#2057) 2023-05-19 17:33:56 +02:00
ModuleNotInScope.juvix Rename MiniJuvix to Juvix (#259) 2022-07-08 13:59:45 +02:00
MultipleDeclarations.juvix Rename MiniJuvix to Juvix (#259) 2022-07-08 13:59:45 +02:00
MultipleExportConflict.juvix Rename MiniJuvix to Juvix (#259) 2022-07-08 13:59:45 +02:00
NestedAsPatterns.juvix Improve As-Pattern parsing (#1603) 2022-11-03 10:02:22 +01:00
NestedPatternBraces.juvix remove ≔ from the language and replace it by := (#1563) 2022-09-30 10:55:32 +10:00
NotInScope.juvix Rename MiniJuvix to Juvix (#259) 2022-07-08 13:59:45 +02:00
PragmasFormat.juvix Add: pragma support (#1997) 2023-04-26 15:26:13 +02:00
PragmasYAML.juvix Iterator syntax (#2126) 2023-05-30 15:30:11 +02:00
QualSymNotInScope.juvix Rename MiniJuvix to Juvix (#259) 2022-07-08 13:59:45 +02:00
Tab.juvix Disallow tab characters as spaces (#1523) 2022-09-07 13:59:41 +02:00
UnusedOperatorDef.juvix Add syntax keyword (#2107) 2023-05-22 12:50:07 +02:00
WrongModuleName.juvix Rename MiniJuvix to Juvix (#259) 2022-07-08 13:59:45 +02:00