add generics
This commit is contained in:
1 parent
79533e9537
commit
2204d58102
22 files changed
+47358
-37579
No files matched your search
+240
-16
@@ -36,7 +36,7 @@ Point :: &{
|
||||
y: i32 = 0
|
||||
}
|
||||
point := &Point.{ x: 1; y = 2 }
|
||||
maybe: []{i32?}: [nil, some 1]
|
||||
maybe: []{i32?}: [|.none, 1->|.some]
|
||||
|
||||
---
|
||||
|
||||
@@ -73,11 +73,16 @@ maybe: []{i32?}: [nil, some 1]
|
||||
(primitive_type))))
|
||||
(collection_literal
|
||||
(collection_entry
|
||||
(nil_literal))
|
||||
(sum_constructor
|
||||
(identifier)))
|
||||
(collection_entry
|
||||
(unary_expression
|
||||
(pipeline_expression
|
||||
(signed_numeric_literal
|
||||
(integer_literal)))))))
|
||||
(integer_literal))
|
||||
(direct_pipeline_stage
|
||||
(pipeline_callable
|
||||
(sum_constructor
|
||||
(identifier)))))))))
|
||||
|
||||
==================
|
||||
Control flow and patterns
|
||||
@@ -302,17 +307,17 @@ unit :: @ () -> i32 { 42 }
|
||||
Optional and result wrappers
|
||||
==================
|
||||
|
||||
wrap :: @ value: i32 -> i32 ! str { ok value }
|
||||
wrap :: @ value: i32 -> i32 ! str { value->|.ok }
|
||||
first :: @ items: []i32 -> i32? {
|
||||
match items {
|
||||
[] => nil
|
||||
[head, ...rest] => some head
|
||||
[] => |.none
|
||||
[head, ...rest] => head->|.some
|
||||
}
|
||||
}
|
||||
unwrap :: @ result: i32 ! str -> i32 {
|
||||
match result {
|
||||
ok value => value
|
||||
err _ => 0
|
||||
|.ok value => value
|
||||
|.err _ => 0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -329,8 +334,12 @@ unwrap :: @ result: i32 ! str -> i32 {
|
||||
(primitive_type)
|
||||
(primitive_type))
|
||||
(block
|
||||
(unary_expression
|
||||
(identifier)))))
|
||||
(pipeline_expression
|
||||
(identifier)
|
||||
(direct_pipeline_stage
|
||||
(pipeline_callable
|
||||
(sum_constructor
|
||||
(identifier))))))))
|
||||
(declaration
|
||||
(identifier)
|
||||
(function_literal
|
||||
@@ -346,7 +355,8 @@ unwrap :: @ result: i32 ! str -> i32 {
|
||||
(match_arm
|
||||
(pattern
|
||||
(array_pattern))
|
||||
(nil_literal))
|
||||
(sum_constructor
|
||||
(identifier)))
|
||||
(match_arm
|
||||
(pattern
|
||||
(array_pattern
|
||||
@@ -355,8 +365,12 @@ unwrap :: @ result: i32 ! str -> i32 {
|
||||
(identifier)))
|
||||
(array_pattern_entry
|
||||
(identifier))))
|
||||
(unary_expression
|
||||
(identifier)))))))
|
||||
(pipeline_expression
|
||||
(identifier)
|
||||
(direct_pipeline_stage
|
||||
(pipeline_callable
|
||||
(sum_constructor
|
||||
(identifier))))))))))
|
||||
(declaration
|
||||
(identifier)
|
||||
(function_literal
|
||||
@@ -371,12 +385,14 @@ unwrap :: @ result: i32 ! str -> i32 {
|
||||
(identifier)
|
||||
(match_arm
|
||||
(pattern
|
||||
(wrapper_pattern
|
||||
(sum_pattern
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(identifier))
|
||||
(match_arm
|
||||
(pattern
|
||||
(wrapper_pattern))
|
||||
(sum_pattern
|
||||
(identifier)))
|
||||
(signed_numeric_literal
|
||||
(integer_literal))))))))
|
||||
|
||||
@@ -433,3 +449,211 @@ mixed :: @ (left: i32, right) -> i32 { left + right }
|
||||
(binary_expression
|
||||
(identifier)
|
||||
(identifier))))))
|
||||
|
||||
==================
|
||||
Postfix pipeline stages
|
||||
==================
|
||||
|
||||
mixed :: -3->add_ten + 2 * 3->double - {1 + 1}->double
|
||||
checked :: not c->is_digit
|
||||
unwrapped :: input->fallible?->next
|
||||
|
||||
---
|
||||
|
||||
(source_file
|
||||
(declaration
|
||||
(identifier)
|
||||
(binary_expression
|
||||
(binary_expression
|
||||
(unary_expression
|
||||
(pipeline_expression
|
||||
(signed_numeric_literal
|
||||
(integer_literal))
|
||||
(direct_pipeline_stage
|
||||
(pipeline_callable
|
||||
(identifier)))))
|
||||
(binary_expression
|
||||
(signed_numeric_literal
|
||||
(integer_literal))
|
||||
(pipeline_expression
|
||||
(signed_numeric_literal
|
||||
(integer_literal))
|
||||
(direct_pipeline_stage
|
||||
(pipeline_callable
|
||||
(identifier))))))
|
||||
(pipeline_expression
|
||||
(block
|
||||
(binary_expression
|
||||
(signed_numeric_literal
|
||||
(integer_literal))
|
||||
(signed_numeric_literal
|
||||
(integer_literal))))
|
||||
(direct_pipeline_stage
|
||||
(pipeline_callable
|
||||
(identifier))))))
|
||||
(declaration
|
||||
(identifier)
|
||||
(unary_expression
|
||||
(pipeline_expression
|
||||
(identifier)
|
||||
(direct_pipeline_stage
|
||||
(pipeline_callable
|
||||
(identifier))))))
|
||||
(declaration
|
||||
(identifier)
|
||||
(pipeline_expression
|
||||
(identifier)
|
||||
(direct_pipeline_stage
|
||||
(pipeline_callable
|
||||
(identifier)))
|
||||
(direct_pipeline_stage
|
||||
(pipeline_callable
|
||||
(identifier))))))
|
||||
|
||||
==================
|
||||
Continuations after same-line stages
|
||||
==================
|
||||
|
||||
flat := value->first->second
|
||||
->third
|
||||
whole := a + b->f
|
||||
->g
|
||||
|
||||
---
|
||||
|
||||
(source_file
|
||||
(declaration
|
||||
(identifier)
|
||||
(pipeline_expression
|
||||
(identifier)
|
||||
(direct_pipeline_stage
|
||||
(pipeline_callable
|
||||
(identifier)))
|
||||
(direct_pipeline_stage
|
||||
(pipeline_callable
|
||||
(identifier)))
|
||||
(continuation_pipeline_stage
|
||||
(pipeline_callable
|
||||
(identifier)))))
|
||||
(declaration
|
||||
(identifier)
|
||||
(pipeline_expression
|
||||
(binary_expression
|
||||
(identifier)
|
||||
(pipeline_expression
|
||||
(identifier)
|
||||
(direct_pipeline_stage
|
||||
(pipeline_callable
|
||||
(identifier)))))
|
||||
(continuation_pipeline_stage
|
||||
(pipeline_callable
|
||||
(identifier))))))
|
||||
|
||||
==================
|
||||
Generic binders and constraints
|
||||
==================
|
||||
|
||||
Show :: <>{
|
||||
to_str: str
|
||||
...Display
|
||||
}
|
||||
pick: <T: Show, (T, T): Ordered> (T, T) -> T: @ (first, second): (T, T) { first }
|
||||
Card :: &{ label: Output<make_label: Show>: }
|
||||
|
||||
---
|
||||
|
||||
(source_file
|
||||
(declaration
|
||||
(identifier)
|
||||
(type_definition
|
||||
(constraint_body
|
||||
(constraint_entry
|
||||
(identifier)
|
||||
(primitive_type))
|
||||
(constraint_spread
|
||||
(identifier)))))
|
||||
(declaration
|
||||
(identifier)
|
||||
(binder
|
||||
(binder_entry
|
||||
(identifier)
|
||||
(identifier))
|
||||
(binder_entry
|
||||
(tuple_type
|
||||
(identifier)
|
||||
(identifier))
|
||||
(identifier)))
|
||||
(function_type
|
||||
(tuple_type
|
||||
(identifier)
|
||||
(identifier))
|
||||
(identifier))
|
||||
(function_literal
|
||||
(typed_parameter
|
||||
(tuple_pattern
|
||||
(pattern
|
||||
(identifier))
|
||||
(pattern
|
||||
(identifier)))
|
||||
(tuple_type
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(block
|
||||
(identifier))))
|
||||
(declaration
|
||||
(identifier)
|
||||
(type_definition
|
||||
(product_type
|
||||
(product_field
|
||||
(identifier)
|
||||
(output_type
|
||||
(identifier)
|
||||
(identifier)
|
||||
(identifier)))))))
|
||||
|
||||
==================
|
||||
Import filters
|
||||
==================
|
||||
|
||||
use math.{sqrt for f64, pi as p}
|
||||
use .shapes.area for Circle
|
||||
pub { area for Circle; sqrt }
|
||||
|
||||
---
|
||||
|
||||
(source_file
|
||||
(use_declaration
|
||||
(module_path
|
||||
(identifier))
|
||||
(import_member
|
||||
(identifier)
|
||||
(import_filter
|
||||
(primitive_type)))
|
||||
(import_member
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(use_declaration
|
||||
(module_path
|
||||
(qualified_name
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(import_filter
|
||||
(identifier)))
|
||||
(pub_declaration
|
||||
(pub_entry
|
||||
(identifier)
|
||||
(import_filter
|
||||
(identifier)))
|
||||
(pub_entry
|
||||
(identifier))))
|
||||
|
||||
==================
|
||||
Reserved word
|
||||
:error
|
||||
==================
|
||||
|
||||
context := 1
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in new issue
Block a user