updated README.md with some TODOs
This commit is contained in:
parent
7b4e179560
commit
a1880f7198
@ -114,6 +114,33 @@ ex resume.
|
|||||||
ex resume: value.
|
ex resume: value.
|
||||||
ex return: value.
|
ex return: value.
|
||||||
|
|
||||||
|
### goto
|
||||||
|
|
||||||
|
~~~
|
||||||
|
goto jump_label.
|
||||||
|
|
||||||
|
jump_label::
|
||||||
|
a + b;
|
||||||
|
~~~
|
||||||
|
|
||||||
|
useful to make a block return
|
||||||
|
can i deprecate the ^^ operator?
|
||||||
|
|
||||||
|
~~~
|
||||||
|
[ 1 + 2. goto r. 3 + 4. r::]
|
||||||
|
~~~
|
||||||
|
|
||||||
|
goto must not cross the boundary of the block context.
|
||||||
|
|
||||||
|
~~~
|
||||||
|
this is invalid. cannot jump into a block from outside
|
||||||
|
and vice versa.
|
||||||
|
goto x.
|
||||||
|
[ x::
|
||||||
|
1 + 2 ].
|
||||||
|
~~~
|
||||||
|
|
||||||
|
|
||||||
### Type checking
|
### Type checking
|
||||||
|
|
||||||
Type checking not implemented yet.
|
Type checking not implemented yet.
|
||||||
@ -138,9 +165,34 @@ class SampleClass(Object)
|
|||||||
TODO: How to specify return type of a block? or How to specify parameter type to a block?
|
TODO: How to specify return type of a block? or How to specify parameter type to a block?
|
||||||
How to evaluate a block type-safely?
|
How to evaluate a block type-safely?
|
||||||
~~~
|
~~~
|
||||||
[ => Integer :(Integer)a :(Integer)b |
|
[ :(Integer)a :(Integer)b => Integer |
|
||||||
|
|
||||||
| (Integer)c (Integer)d }
|
| (Integer)c (Integer)d }
|
||||||
a + b
|
a + b
|
||||||
] with: 20 with: 10
|
] with: 20 with: 10
|
||||||
|
|
||||||
|
the method value is a variadic method. and it is a primitive.
|
||||||
|
[ :a :b | a + b ](1, 20) <---- syntax sugar for [:a :b | a + b] value(1, 20).
|
||||||
|
|
||||||
|
[:(Integer)a :(Integer)b => Integer | a + b ] value("kkkk", 20)
|
||||||
|
-> the first argument violates the expected type.
|
||||||
|
-> argument types to a method is defined in the method signature.
|
||||||
|
-> but the block argument types are specified in the block itself.
|
||||||
|
-> so it doesn't seem natural to achieve type safety without treating 'value' specially.
|
||||||
|
-> create a shorthand expression for 'value' [:(Integer)a :(Integer)b => (Integer) | a + b ](1, 2)
|
||||||
|
-> ] followed by ( ===> shorthand expression for value.
|
||||||
|
-> it looks more sensible to treat this () specially
|
||||||
|
|
||||||
|
what looks better as a shorthand expression for block value?
|
||||||
|
[ :a :b | a + b ](10, 20)
|
||||||
|
[ 10 + 20 ]() // no arguments
|
||||||
|
[ :a :b | a + b ]->(10, 20). // -> cannot form a valid binary selector. must exclude it from binary selector patterns
|
||||||
|
[ 10 + 20 ]->() // if no arugments are required.
|
||||||
|
|
||||||
|
continuation?
|
||||||
|
| a |
|
||||||
|
a->()? block value?
|
||||||
|
|
||||||
|
| (Block)a |
|
||||||
|
a->()? block value?
|
||||||
|
|
||||||
~~~
|
~~~
|
Loading…
Reference in New Issue
Block a user