@@ -407,32 +407,35 @@ module Internal =
407
407
type ParserState = {
408
408
pos: Pos
409
409
running_status: VoiceEvent
410
- input: Span < byte >
410
+ input: byte array
411
411
}
412
412
with
413
413
member state.posPastEnd = state.pos >= state.input.Length
414
414
member state.moved direction = { state with pos = state.pos + direction }
415
415
member state.get () = state.input.[ state.pos]
416
416
417
- type ErrorMessage = string
417
+ type ErrorMessage =
418
+ | EOF of where : string
418
419
type ParseError = ParseError of Pos * ErrorMessage
419
420
420
- type ParserM < 'a > = { getParserM : ParserState -> ( Result < 'a , ParseError > * ParserState )}
421
+ type ParserMonad < 'a > =
422
+ | ParserMonad of ( byte [] -> ParserState -> Result < 'a , ParseError > * ParserState )
421
423
422
- let parserM parse = { getParserM = parse }
423
-
424
+
425
+ //type ParserM<'a> = {getParserM : ParserState -> (Result<'a,ParseError> * ParserState)}
424
426
let err pos msg = Error ( ParseError( pos, msg))
425
427
426
- let getPos = parserM ( fun state -> ( Ok ( state.pos), state))
428
+ let parserM parse = ParserMonad parse
429
+ let getPos = parserM ( fun _ state -> Ok ( state.pos), state)
427
430
428
- let inline failPastEndOrResult ( state : ParserState ) funcName getResultAndState =
431
+ let inline failPastEndOrResult data ( state : ParserState ) funcName getResultAndState =
429
432
if state.posPastEnd then
430
- ( err state.pos ( funcName + " - no more data " )), state
433
+ ( err state.pos ( EOF funcName )), state
431
434
else
432
435
let res , state = getResultAndState state
433
- Ok res, state
436
+ Ok ( res) , state
434
437
435
- let inline checkedPastEndOrResult fName getResultAndNextState = parserM <| fun state -> failPastEndOrResult state fName getResultAndNextState
438
+ let inline checkedPastEndOrResult fName getResultAndNextState = parserM <| fun bytes state -> failPastEndOrResult bytes state fName getResultAndNextState
436
439
437
440
let peek = checkedPastEndOrResult " peek" ( fun state -> state.get(), state)
438
441
@@ -453,7 +456,7 @@ module Internal =
453
456
fun state -> state.get(), state.moved( 1 )
454
457
)
455
458
456
- let word16be : ParserM < word16 > =
459
+ let word16be : ParserMonad < word16 > =
457
460
checkedPastEndOrResult " word16be" (
458
461
fun state -> failwith " uncons2!!!"
459
462
)
0 commit comments