val typecheck : Types.t_exp -> (Types.ftype, Types.error) result val unify : Types.intermediaryTypes -> Types.intermediaryTypes -> (Types.substitution, Types.error) result module VariableSet : Set.S with type elt = string val freevariables : Types.intermediaryTypes -> VariableSet.t