abstrakt:
data Exp = I S.Id --  Bezeichner (Variable)
  | Abstraction 
        { formal :: S.Id , body :: Exp }
  | Application 
        { rator  :: Exp  , rand :: Exp }
konkret:
(lam g (lam a (lam b (app (app g b) a))))
(nach Turbak, Gifford: Design Concepts in Programming Languages)