Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extracting field from type Ocaml

Tags:

ocaml

This seems like a dumb question to ask, as when I prototype it inside of a terminal I am able to make this work. But when I use the following specific module:

http://caml.inria.fr/pub/docs/manual-ocaml/libref/Lexing.html

and this code:

(*Identifiers*)
let ws = [' ' '\t']*
let id = ['A'-'Z' 'a'-'z'] +
let map = id ws  ':' ws  id
let feed = '{' ws  map+ ws '}'
let feeds = '[' ws feed + ws ']'
(*Entry Points *)
rule token  = parse
            [' ' '\t']     { token lexbuf }     (* skip blanks *)
          | ['\n' ]        { EOL }
          | feeds as expr  {   Feeds( expr ) }
          | id as expr     { Id(expr) }
          | feed as expr   {
                let pos = Lexing.lexeme_start_p lexbuf in
                let pos_bol = pos.pos_bol in
                print_string (string_of_int pos_bol);
                print_string "\n";
                Feed(expr) }

I am getting the following error:

Error: Unbound record field label pos_bol

and I am kind of perplexed to why this happening. In the documentation I linked above it says that pos_bol is a field of the type Lexing.position

Sorry, I feel like this is going to have a rather obvious answer when it is answered, but thanks any way!

like image 893
Lilluda 5 Avatar asked Dec 09 '25 23:12

Lilluda 5


1 Answers

In OCaml, sum constructors and record field names are scoped inside modules, like identifiers. The position record is defined inside Lexing, which isn't opened in the current scope, so instead of pos.pos_bol you should use pos.Lexing.pos_bol.

like image 134
gasche Avatar answered Dec 12 '25 17:12

gasche



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!