Theory

A product type bundles multiple values together (โ€œandโ€ data).

Tuples

type Point = (Double, Double)

Records

data Circle = Circle
  { cx :: Double
  , cy :: Double
  , r  :: Double
  }

Patternโ€‘match or use field selectors: r circ.

Semantics

If A has values and B has values, then has .

Implementation

Constructors combine, patterns split:

area :: Circle -> Double
area (Circle _ _ rad) = pi * rad * rad