                 })
             })
         }
-        return xxs
     }
 }
 

	}

	public static func shrink(f : ArrowOf<T, U>) -> [ArrowOf<T, U>] {
		var xxs : [ArrowOf<T, U>] = []
		for (x, y) in f.table {
			xxs += U.shrink(y).map({ (y2 : U) -> ArrowOf<T, U> in
				return ArrowOf<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
            }
