ava/lists.md

44 lines
652 B
Markdown

# Lists
Lists are a standard Ava type. Specifically, `List[A]` represents a linked list.
```
let x: List[Int32] := { 1, 2, 3 }
let y := prepend(x, 0)
let z := append(x, { 4, 5 })
let w: Option[Int32] := head(x)
let tail: List[Int32] := tail(x)
let sz: List[Int32] := size(x)
```
## Type Class Support
- `Monad`
- `Monoid`
- `Show`
- `Eq`
## NonEmptyList
The type `NonEmptyList` is a list which cannot be empty:
```
given A
record NonEmptyList: (head: A, tail: List[A])
```
## Indexing
Lists cannot be accessed by index.
## Implementation
```
given A
enum List
object Nil
given A
record List(head: A, tail: List[A])
end enum
```