packages feed

kure-0.2.1: test/Exp.hs

{-# LANGUAGE TypeFamilies #-}

module Exp where

import Language.KURE
        
type Name = String
data Exp = Lam Name Exp
         | App Exp Exp
         | Var Name
   deriving Show

instance Term Exp where
  type Generic Exp = Exp  -- Exp is its own Generic root.
  inject    = id
  select e  = return e

-- examples
e1 = Var "x"
e2 = Var "y"
e3 = Lam "x" e1
e4 = Lam "x" e2
e5 = App e1 e2
e6 = App e3 e4
e7 = App e4 e6
e8 = Lam "z" (Var "z")
e9 = Lam "x" e3
e10 = Lam "x" e4
e11 = Lam "x" e5