package lambdaKit.model.util; import lambdaKit.model.term.Abstraction; import lambdaKit.model.type.FunctionType; /* * The TypeAssigner assigns types to combinators, à la Curry. * * If the combinator A is typed by (T1 -> T2) * and the combinator B is typed by T1 * then the combinator AB is typed by T2. */ public interface TypeAssigner { /* * Assigns a FunctionType to a combinator and returns this FunctionType. * Returns null if the combinator cannot be typed, such as "λa.aa". */ public FunctionType assignType(Abstraction combinatorHand); }