@@ -6,6 +6,7 @@ module ParserMonad =
6
6
open System.IO
7
7
open FSharpPlus
8
8
open FSharpPlus.Data
9
+ open FSharpPlus.Math .Generic
9
10
10
11
/// Status is either OFF or the previous VoiceEvent * Channel.
11
12
type VoiceEvent =
@@ -68,6 +69,8 @@ module ParserMonad =
68
69
#if DEBUG_ LASTPARSE
69
70
* lastToken : obj // need top level type, picking System.Object for now
70
71
#endif
72
+ with
73
+ static member (+) ( _ : ParseError , y : ParseError ) = y
71
74
72
75
let inline mkOtherParseError st ( genMessage : Pos -> string ) =
73
76
ParseError(
@@ -134,11 +137,7 @@ module ParserMonad =
134
137
let mzero () : ParserMonad < 'a > =
135
138
StateT <| fun state -> Error ( mkParseError state ( EOF " mzero" ))
136
139
137
- let inline mplus ( parser1 : ParserMonad < 'a >) ( parser2 : ParserMonad < 'a >) : ParserMonad < 'a > =
138
- StateT <| fun state ->
139
- match apply1 parser1 state with
140
- | Error _ -> apply1 parser2 state
141
- | Ok res -> Ok res
140
+ let inline mplus ( parser1 : ParserMonad < 'a >) ( parser2 : ParserMonad < 'a >) : ParserMonad < 'a > = parser1 <|> parser2
142
141
143
142
let inline mfor ( items : #seq<'a> ) ( fn : 'a -> ParserMonad < 'b >) : ParserMonad < seq < 'b >> = failwithf " "
144
143
@@ -243,13 +242,13 @@ module ParserMonad =
243
242
( st : State )
244
243
( fk : ParseError -> Result < 'a list * State , ParseError >)
245
244
( sk : State -> 'a list -> Result < 'a list * State , ParseError >) =
246
- if i <= LanguagePrimitives.GenericZero then
245
+ if i <= 0 G then
247
246
sk st []
248
247
else
249
248
match apply1 parser st with
250
249
| Error msg -> fk msg
251
250
| Ok ( a1, st1) ->
252
- work ( i - LanguagePrimitives.GenericOne ) st1 fk ( fun st2 ac ->
251
+ work ( i - 1 G ) st1 fk ( fun st2 ac ->
253
252
sk st2 ( a1 :: ac))
254
253
work length state ( fun msg -> Error msg) ( fun st ac -> Ok ( ac, st))
255
254
|> Result.map ( fun ( ans , st ) -> ( List.toArray ans, st))
@@ -285,7 +284,7 @@ module ParserMonad =
285
284
let mutable lastState = state
286
285
// revisit with a fold?
287
286
let mutable error = Ok ( Unchecked.defaultof<_>, lastState)
288
- let mutable i = LanguagePrimitives.GenericZero
287
+ let mutable i = 0 G
289
288
let mutable errorOccured = false
290
289
logf " bound repeat %i " n
291
290
@@ -299,7 +298,7 @@ module ParserMonad =
299
298
| ( Error e) ->
300
299
error <- Error e
301
300
errorOccured <- true
302
- i <- i + LanguagePrimitives.GenericOne
301
+ i <- i + 1 G
303
302
if errorOccured then
304
303
error
305
304
else
0 commit comments