A Haskell implementation of the Pure Type System