{-
each color should be in closed interval [0,1].
nothing in the typesystem requires this to be the case, so we will need to constrain it with a law:

∀ (r :: Double) (g :: Double) (b :: Double)
      (a :: Double).
  color r g b a =
    color (clamp 0 1 r)
          (clamp 0 1 g)
          (clamp 0 1 b)
          (clamp 0 1 a)

All terms in an algebra are built from
- terminal constructors, and
- inductive constructors
  - ones which "derive" new terms based on existing terms
-}

-- inductive
-- rotate 90 degress C(lock)W(ise)
cw :: Tile -> Tile
cw  = undefined


cw :: Tile -> Tile
cw  = undefined
cw  = undefined