fixes for easier parsing, result modifier added

This commit is contained in:
ProgramSnail 2023-07-24 13:02:21 +03:00
parent b26c0544bf
commit 18d84f5f28
2 changed files with 110 additions and 37 deletions

View file

@ -51,7 +51,7 @@ sum 'a 'b = 'a + 'b;
: also this is example of function constraint
@n is position in Fibonacci sequence
? 'n >= 0;
fib @n 'n : Int -> Int =
fib 'n : @n Int -> Int =
'n =: 0 | 1 => 1
=: _ => fib ('n - 1) + fib 'n;
@ -149,10 +149,6 @@ bubble_sort 'arr : ref Array['A] = {
};
}
merge_sort 'arr : <> Array['A] = {
}
: example of ^ and generics. ^ used to denote that this object allocated on heap
: object allocated by unique reference by default
^TreeNode 'Key 'Value =
@ -213,6 +209,18 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
$is_less_then : Ord -> Bool;
}
: function, that takes result argument
result_example 'a! = 'a =: _? => print "value inside"
=: _ => print "error inside";
: function, that returns result
parse_number : Unit! = {
%number_str := String.scan;
%number! := Int.parse number_str;
number.print;
bring ();
}
--------------------------------------------------------------------------------
(source_file
@ -315,7 +323,9 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(return
(unit_literal)))))
(function_definition
(definition_info)
(definition_info
(info)
(info))
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
@ -345,11 +355,14 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(placeholder)
(null_literal))))
(function_definition
(definition_info)
(definition_info
(info))
(annotation_info
(annotation_identifier))
(annotation_identifier)
(info))
(annotation_info
(annotation_identifier))
(annotation_identifier)
(info))
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
@ -360,9 +373,13 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(name_expression
(argument_name_identifier))))
(function_definition
(definition_info)
(definition_info
(info)
(info)
(info))
(annotation_info
(annotation_identifier))
(annotation_identifier)
(info))
(constraint
(operator_expression
(name_expression
@ -599,7 +616,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier)
(number_literal)))))
(function_definition
(definition_info)
(definition_info
(info))
(operator)
(argument_name_identifier)
(argument_name_identifier)
@ -660,7 +678,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(type
(simple_type_identifier)))))
(function_definition
(definition_info)
(definition_info
(info))
(simple_name_identifier)
(argument_name_identifier)
(type
@ -725,7 +744,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(operator)
(bool_literal))))))))
(function_definition
(definition_info)
(definition_info
(info))
(simple_name_identifier)
(argument_name_identifier)
(type
@ -789,16 +809,10 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier))
(operator)
(bool_literal))))))))
(function_definition
(simple_name_identifier)
(argument_name_identifier)
(type
(simple_type_identifier)
(type
(argument_type_identifier)))
(block))
(type_definition
(definition_info)
(definition_info
(info)
(info))
(simple_type_identifier)
(argument_type_identifier)
(argument_type_identifier)
@ -921,7 +935,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier)
(number_literal)))))))
(function_definition
(definition_info)
(definition_info
(info))
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
@ -933,7 +948,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(simple_name_identifier)
(argument_name_identifier))))
(function_definition
(definition_info)
(definition_info
(info))
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
@ -962,7 +978,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(reference_expression
(simple_name_identifier))))))
(function_definition
(definition_info)
(definition_info
(info))
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
@ -987,7 +1004,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(reference_expression
(simple_name_identifier))))))
(function_definition
(definition_info)
(definition_info
(info))
(simple_name_identifier)
(type
(simple_type_identifier))
@ -1006,7 +1024,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(name_expression
(simple_name_identifier))))
(function_definition
(definition_info)
(definition_info
(info))
(simple_name_identifier)
(argument_name_identifier)
(type
@ -1018,7 +1037,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(name_expression
(simple_name_identifier)))))
(function_definition
(definition_info)
(definition_info
(info))
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
@ -1036,7 +1056,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(annotation_identifier)
(argument_name_identifier)))
(function_definition
(definition_info)
(definition_info
(info))
(simple_name_identifier)
(argument_name_identifier)
(argument_name_identifier)
@ -1052,7 +1073,8 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(argument_name_identifier)
(argument_name_identifier)))
(typeclass_definition
(definition_info)
(definition_info
(info))
(typeclass_identifier)
(typeclass_identifier)
(function_definition
@ -1060,4 +1082,52 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name
(type
(simple_type_identifier))
(type
(simple_type_identifier)))))
(simple_type_identifier))))
(function_definition
(definition_info
(info))
(simple_name_identifier)
(argument_name_identifier)
(match
(name_expression
(argument_name_identifier))
(case
(suffix_expression
(placeholder))
(name_expression
(simple_name_identifier)
(string_literal)))
(case
(placeholder)
(name_expression
(simple_name_identifier)
(string_literal)))))
(function_definition
(definition_info
(info))
(simple_name_identifier)
(type
(simple_type_identifier))
(block
(match
(name_definition
(simple_name_identifier))
(case
(name_expression
(type
(simple_type_identifier))
(simple_name_identifier))))
(match
(suffix_expression
(name_definition
(simple_name_identifier)))
(case
(name_expression
(type
(simple_type_identifier))
(simple_name_identifier)
(simple_name_identifier))))
(name_expression
(simple_name_identifier))
(return
(unit_literal)))))