OCamlでUnicodeを扱うパーサを作る為にulexを使う事を考えています。
例えば、以下のような四則演算のパーサがあります。

parser.mly

%{
%}

%token <int> INT
%token ADD SUB MUL DIV EOF
%left ADD SUB
%left MUL DIV
%type <int> exp
%start exp

%%

exp:
| INT         { $1 }
| exp ADD exp { $1 + $3 }
| exp SUB exp { $1 - $3 }
| exp MUL exp { $1 * $3 }
| exp DIV exp { $1 / $3 }

lexer.mll

{
open Parser
}

rule token = parse
| [' ' '\t' '\n' '\r']+ { token lexbuf }
| ['0'-'9']+ { INT(int_of_string (Lexing.lexeme lexbuf)) }
| '-' { SUB }
| '+' { ADD }
| '*' { MUL }
| eof { EOF }
| _ { assert false }

main.ml

let _ =
  let lexbuf = Lexing.from_string "1+2*3" in
  let result = Parser.exp Lexer.token lexbuf in
  Printf.printf "%d\n" result

Makefile

main: parser.ml lexer.ml main.ml
    ocamlfind ocamlc -package ulex parser.mli parser.ml lexer.ml main.ml -o main
parser.ml: parser.mly
    ocamlyacc parser.mly
lexer.ml: lexer.mll
    ocamllex lexer.mll
clean:
    rm -rf *.cm* parser.ml lexer.ml main *.o

opamのリポジトリを検索したところ

./4.02.1/lib/ulex/ulexing.mli
./4.02.1/lib/ulex/utf8.mli

の2つが参考になりそうでした。

They need not work on a type named [lexbuf]: you can use the type
name you want. Then, just do in your ulex-processed source, before
the first lexer specification:

[module Ulexing = L]

Of course, you'll probably want to define functions like [lexeme]
to be used in the lexers semantic actions.

と書いてあるのでlexer.mllにmodule Ulexing = Lと書くと良いようなので、、、。

lexer.mllを以下のように書き換えればコンパイルは通りました。

{
open Parser
module Ulexing = Lexing
}

rule token = parse
| [' ' '\t' '\n' '\r']+ { token lexbuf }
| ['0'-'9']+ { INT(int_of_string (Ulexing.lexeme lexbuf)) }
| '-' { SUB }
| '+' { ADD }
| '*' { MUL }
| eof { EOF }
| _ { assert false }

しかし、これでは単に名前を書き換えているだけに思えますし、LというLexerはありません。
このような使い方で良いのか良くわからないのと、やりたい事としては、ocamllex上でutf-8を扱えるようにしたいのですが、ulexのありがたみが良くわかりません。

https://twitter.com/takeisa/status/503531375127838720

Webで調べたところ上記のような事が書いてありました。

このあと自分で調べるとなると、mliの内容を翻訳してみればよいと思うのですが、分かりやすいサンプルなどがあれば教えてください。