# Builtin types¶

## Booleans¶

```True False
```

## Integers¶

```1 -42 100012020202
```

## Floats¶

```2.02020330 -0.0000000001
```

## Strings¶

```"I am string"

"""
I a
m
multiline string
"""
```

## Symbols¶

```#atomic_string_created_onLyOnce
```

## Tuples¶

```// Tuples are always created inside parens, so you can't write just 1,2,3
() (1,) (1,2,3)
```

## Lists¶

```[]  [1,2,3] 1::2::3::[]
```

## Maps¶

```{} {x=1} {x=1, y=(2,3), z=f(), (1+1)=(fun()=1)}
```

## Functions¶

```fun add3 (x, y, z) = x + y + z
fun (a, b) = a not b
// lambdas
(x, y, z) -> x + y + z
// equivalent to single element tuple (x,) -> x
x -> x
// tuple from tuple
((x,y,z),) -> x + y + z
```

## Intefaces and generic functions¶

```// following code  will create interface Num
// and generic functions -, +, *, /, mod, negate
interface Num(I) =
-(I, I)
+(I, I)
*(I, I)
/(I, I)
mod(I, I)
// unary -
negate(I)
```

## Types¶

```// Abstract singleton type without ability to create instances
type None
type Bool
type True is Bool
type False is Bool
//record type
type Vec2(x,y)
type Vec3 is Vec2(...Vec2, z)
```

## Records¶

```// Records are instances of record types
// To create instance use type like a function
let v2 = Vec2(1, 2)
let v3 = Vec3(1, 2, 4)
```