Algebraic Data Types JavaScript mutable non-ADT Record ADT Record Tuple Sum Result as a Sum of Value and Failure Result container Maybe container Linked list