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