v0.0.5: recursive / self-referential types
This commit is contained in:
19
spec.md
19
spec.md
@@ -132,6 +132,11 @@ def example6-error(): Option[Unit] {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### pattern 1: labelled arguments
|
||||||
|
```
|
||||||
|
def [t] List.remove_prefix(prefix: List[t], list: 'from List[t])
|
||||||
|
```
|
||||||
|
|
||||||
## automatic return types
|
## automatic return types
|
||||||
```
|
```
|
||||||
def add(a: Num, b: Num) -> _ {
|
def add(a: Num, b: Num) -> _ {
|
||||||
@@ -181,7 +186,17 @@ def example(li: List[Char]) -> {t:Token,rem:List[Char]} {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## pattern 1: labelled arguments
|
## recursive data types
|
||||||
```
|
```
|
||||||
def [t] List.remove_prefix(prefix: List[t], list: 'from List[t])
|
type List[t] = {head:t, tail:List[t]}
|
||||||
|
# now you might notice an issue with this
|
||||||
|
# `type` defines non-distinct type alisases
|
||||||
|
# so what is the type of this...
|
||||||
|
# Introducing: type self references
|
||||||
|
# the above example is the same as this:
|
||||||
|
type List[t] = &a {head:t, tail:a}
|
||||||
|
|
||||||
|
# example 2:
|
||||||
|
# a List[List[t]] is just:
|
||||||
|
&b {head: &a {head:t, tail:a}, tail: b}
|
||||||
```
|
```
|
Reference in New Issue
Block a user