 		}
 	}
 	
-	func fold<R>(norm : Free<T> -> R, codense : Codensity<T> -> R) -> R {
+	func fold<R>(norm : FreeId<T> -> R, codense : Codensity<T> -> R) -> R {
 		return undefined()
 	}
 	

		return undefined()
	}
	
	func flatMap<B>(f : T -> Free<B>) -> Free<B> {
		return liftCodense(self, f)
	}
}

private class Pure<T> : Free<T> {
	let val : T
	
	init(x : T) {
		self.val = x
	}
	
	private override func fold<R>(norm: Free<T> -> R, codense : Codensity<T> -> R) -> R {
		return norm(self)
	}
	

///
/// Codense implementation with catamorphisms inspired by FunctionalJava
/// https://github.com/functionaljava/functionaljava
private class FreeId<T> {
	func resume() -> Either<Box<() -> Trampoline<T>>, T> {
		return undefined()
	}
