         }
     }
 
-    func look() -> Token {
-        return look(0)
-    }
-    func look(ahead: Int) -> Token {
-        return look(ahead, skipLineFeed: true)
-    }
-    func look(ahead: Int, skipLineFeed: Bool) -> Token {
+    func look(ahead: Int = 0, skipLineFeed: Bool = true) -> Token {
         if index + ahead >= queue.count {
             for var i = queue.count - 1; i < index + ahead; ++i {
                 queue.append(load())

    }
}

protocol TokenPeeper {
    func look() -> Token
    func look(Int) -> Token
    func look(Int, skipLineFeed: Bool) -> Token
}

class TokenStream : TokenPeeper {
    private struct Context {
        var source: String? = nil
        // set `CharacterClass.LineFeed` to `prev`


    private func examine(kinds: [TokenKind]) -> (Bool, TokenKind) {
        let skipLineFeed = kinds.contains(.LineFeed)
        let t = look(skipLineFeed: skipLineFeed)
        for k in kinds {
            if t.kind == k {
                next(skipLineFeed: skipLineFeed)
                return (true, t.kind)
            }
        }
