現在のプロジェクトでは、スクリプトコードのレキシングと解析が行われています。そのため、私はfslexとfsyaccを使用しています。 Fslex LexBuffersはLexBuffer<char>
とLexBuffer<byte>
のいずれかになります。両方を使用するオプションがあります。F#インライン関数の特殊化
両方を使用するには、^ 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#でも可能なことを試みていますか?もしそうなら、誰かが私に正しい道を向けることができますか?
ありがとうございます!
ありがとう、トマス。私は、F#関数が過負荷にならない理由がなければならないと確信しています。何があっても、私は理解できません。静的なクラスで十分です! – Ben