Мой текущий проект включает в себя лексический и синтаксический анализ кода скрипта, и поэтому я использую fslex и fsyacc. Fslex LexBuffers могут быть в вариантах LexBuffer<char>
и LexBuffer<byte>
, и я хотел бы иметь возможность использовать оба.
Для того, чтобы использовать оба, мне нужна функция лексемы типа ^ buf -> string. До сих пор мои попытки специализации выглядели так:
let inline lexeme (lexbuf: ^buf) : ^buf -> string where ^buf : (member Lexeme: char array) =
new System.String(lexbuf.Lexeme)
let inline lexeme (lexbuf: ^buf) : ^buf -> string where ^buf : (member Lexeme: byte array) =
System.Text.Encoding.UTF8.GetString(lexbuf.Lexeme)
Я получаю ошибку типа, утверждающую, что тело функции должно иметь тип ^buf -> string
, но выводимый тип - просто string
. Понятно, что я делаю что-то (в основном?) Неправильно.
Возможно ли то, что я пытаюсь сделать в F #? Если так, может ли кто-нибудь указать мне правильный путь?
Спасибо!