# List notation

Jump to: navigation, search

We are used to the list notation `[0,1,2,3]`. However it is syntactic sugar for `(0:1:2:3:[])`. By using the syntactic sugar, we often miss the benefits of the direct notation.

```0 :
1 :
2 :
3 :
[]
```
Thus it is more theoretically sound and easier to edit.
• You can easily mix elements and lists into a list by appending the corresponding operator in each line:
```[1,2,3] ++
4 :
listA ++
5 :
listB ++
[]
```
• You can insert elements or sub-lists conditionally.
```infixr 5 ?:, ?++

(?:) :: (Bool, a) -> [a] -> [a]
(?:) (b, x) = if b then (x:) else id

(?++) :: (Bool, [a]) -> [a] -> [a]
(?++) (b, x) = if b then (x++) else id

list =
[2,3] ++
(x==5, 5) ?:
(x==7, listA) ?++
[]
```
• You can construct a singleton list with a section of the colon operator:
```(:[]) :: a -> [a]
```
.
• You can prepend an element to a list:
```(x:) :: [a] -> [a]
```
. E.g.
```iterate (' ':) []
```
creates a list of blank strings with increasing size very efficiently.

See also: