 	public var parameters: [Term] {
 		func parameters(type: Type<(Term, [Term])>) -> [Term] {
 			return type.analysis(
-				ifVariable: const([]),
-				ifUnit: const([]),
 				ifConstructed: {
 					$0.analysis(
 						ifUnit: [],

	private static func distinctTerms(type: Type<Set<Term>>) -> Set<Term> {
		let binary: (Set<Term>, Set<Term>) -> Set<Term> = { $0.union($1) }
		return type.analysis(
			ifVariable: const([]),
			ifUnit: const([]),
			ifConstructed: {
				$0.analysis(
					ifUnit: [],

					ifSum: binary,
					ifProduct: binary)
			},
			ifUniversal: { $1 },
			otherwise: const([]))
	}

	public func instantiate(_ freshVariable: (() -> Variable)? = nil) -> Term {
		func instantiate(type: Type<Term>) -> Term {
			let binary: (Term, Term) -> (Term, Term) = { ($0.instantiate(freshVariable), $1.instantiate(freshVariable)) }
			return type.analysis(
				ifConstructed: {
					$0.analysis(
						ifUnit: Term(type),
