struct OddNumbersTimesFiveGenerator : Generator { var elements : S.GeneratorType mutating func next() -> Int? { while true { switch elements.next() { case let .Some(x) where x % 2 == 0: continue case let .Some(x): return x * 5 case .None: return nil } } } init(_ seq: S) { self.elements = seq.generate() } } let xs = [1, 5, 8, 3] let gen = OddNumbersTimesFiveGenerator(xs) let seq = SequenceOf({ gen }) let seq2 = map(filter(xs, { $0 % 2 != 0 }), { $0 * 5 }) println(equal(seq, seq2))