 				})
 			})
 		}
-		return xxs
 	}
 }
 

    }
    
    public static func shrink(f : IsoOf<T, U>) -> [IsoOf<T, U>] {
        var xxs : [IsoOf<T, U>] = []
        for (x, y) in f.table {
            xxs += Zip2(T.shrink(x), U.shrink(y)).map({ (y1 , y2) -> IsoOf<T, U> in
                return IsoOf<T, U>({ (z : T) -> U in
                    if x == z {
                        return y2

        }
        
        self.project = { u in
            let ts = self.table.filter { $1 == u }.map { $0.0 }
            if let k = ts.first, _ = self.table[k] {
                return k
            }
