 /// Monads" by Rúnar Óli Bjarnason ~( http://blog.higher-order.com/assets/trampolines.pdf ) with the
 /// added benefit of Trampoline itself becoming a Monad.
 public struct Trampoline<T> {
-	private let t : Free<T>
-	
-	private init(_ t : Free<T>) {
+	private let t : FreeId<T>
+	
+	private init(_ t : FreeId<T>) {
 		self.t = t
 	}
 	

	}
}

private class Suspend<T> : Free<T> {
	let suspension : Box<() -> Trampoline<T>>
	
	init(s : Box<() -> Trampoline<T>>) {
		self.suspension = s
	}
	
	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()
	}
