     }
 }
 
-protocol TokenPeeper {
-    func look() -> Token
-    func look(Int) -> Token
-    func look(Int, skipLineFeed: Bool) -> Token
-}
-
-class TokenStream : TokenPeeper {
+class TokenStream {
     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(0, skipLineFeed: skipLineFeed)
        for k in kinds {
            if t.kind == k {
                next(1, skipLineFeed: skipLineFeed)
                return (true, t.kind)
            }
        }

        }
    }

    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())
