#line 1274 "/home/travis/build/felix-lang/felix/src/packages/strings.fdoc"
  class Lexer
  {
    pod type lex_iterator = "char const*";
    fun start_iterator : string -> lex_iterator = "$1.c_str()";
    fun end_iterator: string -> lex_iterator = "$1.c_str()+$1.size()";
    fun bounds (x:string): lex_iterator * lex_iterator = {
      return
        start_iterator x,
        end_iterator x
      ;
    }
    fun string_between: lex_iterator * lex_iterator -> string =
     "::std::string($1,$2)";
  
    fun + : lex_iterator * int -> lex_iterator = "$1 + $2";
    fun - : lex_iterator * int -> lex_iterator = "$1 - $2";
    fun - : lex_iterator * lex_iterator -> int = "$1 - $2";
    fun deref: lex_iterator -> char = "*$1";
  }
  
  instance Eq[Lexer::lex_iterator] {
    fun == :Lexer::lex_iterator * Lexer::lex_iterator -> bool = "$1==$2";
  }
  
  instance Tord[Lexer::lex_iterator] {
    fun < :Lexer::lex_iterator * Lexer::lex_iterator -> bool = "$1<$2";
  }
  
  open Eq[Lexer::lex_iterator];