# ADTs - Algebraic Data Types

Marius Jurgelenas

FrontCon 2019

# WixCode

## The Goal

ADTs - composed types

Algebraic Data Types

Product types

Sum types

langauge-agnostic

## Primitive types

• String
• Number
• Boolean
• Undefined
• Null

Fruit Salad - a Product type

type Fruit Salad = Apple AND Banana AND Cherry

How many different fruit salads can we make?

Fruit Salad - a Product type

3 × 2 × 2 = 12

Product

Fruit Salad - a Product type

{

name: 'John',     // string

age: 42,              // number

ownsDog: true // boolean

}

Person - a Product type

type Fruit Snack = Apple OR Banana OR Cherry

Fruit Snack - a Sum type

How many different snacks can we have?

Fruit Snack - a Sum type

3 + 2 + 2 = 7

Sum

Fruit Snack - a Sum type

Are Sum types ok?

type snack =              |                  |

type strangeThing =  number | boolean

Uncought TypeError: Cannot read property 'toUpperCase' of undefined

name.toUpperCase()

Sum types are ok

if (name) {

return name.toUpperCase()

} else {

return "No name!"

}

Matching Types

Why is it called Algebraic?

Algebraic Data Types

Product types

Sum types

Look around - Algebra everywhere!

type OS = Linux | Windows | MacOS

type WorkPlace = Computer & Desk & Chair

type Computer = Hardware & OS