module Language.Pointfree.Syntax where

data Type = One
	  | Base String
          | Fix Funct
	  | Type :*: Type
	  | Type :+: Type
	  | Type :-> Type
	    deriving Eq

data Funct = Id
	   | Const Type
	   | Funct :**: Funct
	   | Funct :++: Funct
	     deriving Eq

data Term = ID | Term :.: Term 
	  | FST | SND | Term :/\: Term
	  | INL | INR | Term :\/: Term
	  | AP | Curry Term
	  | BANG 
	  | Macro String [Term]
	  | Point String
	  | IN | OUT
	  | Hylo Type Term Term
          | HyloO Type Term Term
	    deriving Eq