@@ -10,7 +10,7 @@ type Cache<T> = Map<number, MemoizationCacheResult<ParserResult<T>>>;
1010let  currentSource  =  "" ; 
1111const  allCache : Set < WeakRef < Cache < unknown > > >  =  new  Set ( ) ; 
1212
13- export  class  Parser < T >  { 
13+ export  class  Parser < const   T >  { 
1414  readonly  rawParser : InnerParser < T > ; 
1515  constructor ( parser : InnerParser < T > )  { 
1616    const  cache : Cache < T >  =  new  Map ( ) ; 
@@ -32,13 +32,13 @@ export class Parser<T> {
3232    } 
3333    return  this . rawParser ( 0 ) . map ( ( {  value } )  =>  value ) ; 
3434  } 
35-   map < U > ( mapper : ( value : T )  =>  U ) : Parser < U >  { 
35+   map < const   U > ( mapper : ( value : T )  =>  U ) : Parser < U >  { 
3636    return  new  Parser ( ( input )  => 
3737      this . rawParser ( input ) 
3838        . map ( ( {  value,  length } )  =>  ( {  value : mapper ( value ) ,  length } ) ) 
3939    ) ; 
4040  } 
41-   mapWithPositionedError < U > ( mapper : ( value : T )  =>  U ) : Parser < U >  { 
41+   mapWithPositionedError < const   U > ( mapper : ( value : T )  =>  U ) : Parser < U >  { 
4242    return  withPosition ( this ) 
4343      . map ( ( value )  =>  withPositionedError ( ( )  =>  mapper ( value . value ) ,  value ) ) ; 
4444  } 
@@ -52,7 +52,7 @@ export class Parser<T> {
5252      . filter ( ( value )  =>  withPositionedError ( ( )  =>  mapper ( value . value ) ,  value ) ) 
5353      . map ( ( {  value } )  =>  value ) ; 
5454  } 
55-   then < U > ( mapper : ( value : T )  =>  Parser < U > ) : Parser < U >  { 
55+   then < const   U > ( mapper : ( value : T )  =>  Parser < U > ) : Parser < U >  { 
5656    return  new  Parser ( ( position )  => 
5757      this . rawParser ( position ) 
5858        . flatMap ( ( {  value,  length } )  => 
@@ -74,10 +74,10 @@ export class Parser<T> {
7474  sortBy ( mapper : ( value : T )  =>  number ) : Parser < T >  { 
7575    return  this . sort ( ( left ,  right )  =>  mapper ( left )  -  mapper ( right ) ) ; 
7676  } 
77-   with < U > ( parser : Parser < U > ) : Parser < U >  { 
77+   with < const   U > ( parser : Parser < U > ) : Parser < U >  { 
7878    return  sequence ( this ,  parser ) . map ( ( [ _ ,  arrayResult ] )  =>  arrayResult ) ; 
7979  } 
80-   skip < U > ( parser : Parser < U > ) : Parser < T >  { 
80+   skip < const   U > ( parser : Parser < U > ) : Parser < T >  { 
8181    return  sequence ( this ,  parser ) . map ( ( [ arrayResult ] )  =>  arrayResult ) ; 
8282  } 
8383} 
@@ -90,7 +90,7 @@ export class PositionedError extends ArrayResultError {
9090    this . name  =  "PositionedError" ; 
9191  } 
9292} 
93- function  withPositionedError < T > ( fn : ( )  =>  T ,  position : Position )  { 
93+ function  withPositionedError < const   T > ( fn : ( )  =>  T ,  position : Position )  { 
9494  try  { 
9595    return  fn ( ) ; 
9696  }  catch  ( error )  { 
@@ -124,16 +124,18 @@ export const nothing: Parser<null> = new Parser(() =>
124124  new  ArrayResult ( [ {  value : null ,  length : 0  } ] ) 
125125) ; 
126126export  const  emptyArray : Parser < ReadonlyArray < never > >  =  nothing . map ( ( )  =>  [ ] ) ; 
127- export  function  lookAhead < T > ( parser : Parser < T > ) : Parser < T >  { 
127+ export  function  lookAhead < const   T > ( parser : Parser < T > ) : Parser < T >  { 
128128  return  new  Parser ( ( input )  => 
129129    parser . rawParser ( input ) 
130130      . map ( ( {  value } )  =>  ( {  value,  length : 0  } ) ) 
131131  ) ; 
132132} 
133- export  function  lazy < T > ( parser : ( )  =>  Parser < T > ) : Parser < T >  { 
133+ export  function  lazy < const   T > ( parser : ( )  =>  Parser < T > ) : Parser < T >  { 
134134  return  new  Parser ( ( input )  =>  parser ( ) . rawParser ( input ) ) ; 
135135} 
136- export  function  choice < T > ( ...choices : ReadonlyArray < Parser < T > > ) : Parser < T >  { 
136+ export  function  choice < const  T > ( 
137+   ...choices : ReadonlyArray < Parser < T > > 
138+ ) : Parser < T >  { 
137139  assertGreater ( 
138140    choices . length , 
139141    1 , 
@@ -143,7 +145,7 @@ export function choice<T>(...choices: ReadonlyArray<Parser<T>>): Parser<T> {
143145    new  ArrayResult ( choices ) . flatMap ( ( parser )  =>  parser . rawParser ( input ) ) 
144146  ) ; 
145147} 
146- export  function  choiceOnlyOne < T > ( 
148+ export  function  choiceOnlyOne < const   T > ( 
147149  ...choices : ReadonlyArray < Parser < T > > 
148150) : Parser < T >  { 
149151  assertGreater ( 
@@ -164,13 +166,13 @@ export function choiceOnlyOne<T>(
164166    empty , 
165167  ) ; 
166168} 
167- export  function  optional < T > ( parser : Parser < T > ) : Parser < null  |  T >  { 
169+ export  function  optional < const   T > ( parser : Parser < T > ) : Parser < null  |  T >  { 
168170  return  choice ( parser ,  nothing ) ; 
169171} 
170- export  function  optionalAll < T > ( parser : Parser < T > ) : Parser < null  |  T >  { 
172+ export  function  optionalAll < const   T > ( parser : Parser < T > ) : Parser < null  |  T >  { 
171173  return  choiceOnlyOne ( parser ,  nothing ) ; 
172174} 
173- export  function  sequence < T  extends  ReadonlyArray < unknown > > ( 
175+ export  function  sequence < const   T  extends  ReadonlyArray < unknown > > ( 
174176  ...sequence :
175177    &  Readonly < {  [ I  in  keyof  T ] : Parser < T [ I ] >  } > 
176178    &  Readonly < {  length : T [ "length" ]  } > 
@@ -187,27 +189,33 @@ export function sequence<T extends ReadonlyArray<unknown>>(
187189    emptyArray , 
188190  )  as  Parser < any > ; 
189191} 
190- export  const  many  =  memoize ( < T > ( parser : Parser < T > ) : Parser < ReadonlyArray < T > >  => 
192+ export  const  many  =  memoize ( < const  T > ( 
193+   parser : Parser < T > , 
194+ ) : Parser < ReadonlyArray < T > >  => 
191195  choice < ReadonlyArray < T > > ( 
192196    sequence ( parser ,  lazy ( lazyEval ( ( )  =>  many ( parser ) ) ) ) 
193197      . map ( ( [ first ,  rest ] )  =>  [ first ,  ...rest ] ) , 
194198    emptyArray , 
195199  ) 
196200) ; 
197- export  function  manyAtLeastOnce < T > ( 
201+ export  function  manyAtLeastOnce < const   T > ( 
198202  parser : Parser < T > , 
199203) : Parser < ReadonlyArray < T > >  { 
200204  return  sequence ( parser ,  many ( parser ) ) 
201205    . map ( ( [ first ,  rest ] )  =>  [ first ,  ...rest ] ) ; 
202206} 
203- export  const  all  =  memoize ( < T > ( parser : Parser < T > ) : Parser < ReadonlyArray < T > >  => 
207+ export  const  all  =  memoize ( < const  T > ( 
208+   parser : Parser < T > , 
209+ ) : Parser < ReadonlyArray < T > >  => 
204210  choiceOnlyOne < ReadonlyArray < T > > ( 
205211    sequence ( parser ,  lazy ( lazyEval ( ( )  =>  all ( parser ) ) ) ) 
206212      . map ( ( [ first ,  rest ] )  =>  [ first ,  ...rest ] ) , 
207213    emptyArray , 
208214  ) 
209215) ; 
210- export  function  allAtLeastOnce < T > ( parser : Parser < T > ) : Parser < ReadonlyArray < T > >  { 
216+ export  function  allAtLeastOnce < const  T > ( 
217+   parser : Parser < T > , 
218+ ) : Parser < ReadonlyArray < T > >  { 
211219  return  sequence ( parser ,  all ( parser ) ) 
212220    . map ( ( [ first ,  rest ] )  =>  [ first ,  ...rest ] ) ; 
213221} 
@@ -300,7 +308,7 @@ export const notEnd: Parser<null> = new Parser((position) =>
300308      ) , 
301309    ] ) 
302310) ; 
303- export  function  withSource < T > ( 
311+ export  function  withSource < const   T > ( 
304312  parser : Parser < T > , 
305313) : Parser < readonly  [ value : T ,  source : string ] >  { 
306314  return  new  Parser ( ( position )  => 
@@ -313,7 +321,7 @@ export function withSource<T>(
313321    } ) ) 
314322  ) ; 
315323} 
316- export  function  withPosition < T > ( 
324+ export  function  withPosition < const   T > ( 
317325  parser : Parser < T > , 
318326) : Parser < Readonly < {  value : T  } >  &  Position >  { 
319327  return  new  Parser ( ( position )  => 
@@ -323,12 +331,12 @@ export function withPosition<T>(
323331    } ) ) 
324332  ) ; 
325333} 
326- export  class  CheckedParser < T >  { 
334+ export  class  CheckedParser < const   T >  { 
327335  constructor ( public  check : Parser < unknown > ,  public  parser : Parser < T > )  { } 
328-   map < U > ( mapper : ( value : T )  =>  U ) : CheckedParser < U >  { 
336+   map < const   U > ( mapper : ( value : T )  =>  U ) : CheckedParser < U >  { 
329337    return  new  CheckedParser ( this . check ,  this . parser . map ( mapper ) ) ; 
330338  } 
331-   mapWithPositionedError < U > ( mapper : ( value : T )  =>  U ) : CheckedParser < U >  { 
339+   mapWithPositionedError < const   U > ( mapper : ( value : T )  =>  U ) : CheckedParser < U >  { 
332340    return  new  CheckedParser ( 
333341      this . check , 
334342      this . parser . mapWithPositionedError ( mapper ) , 
@@ -344,16 +352,16 @@ export class CheckedParser<T> {
344352    ) ; 
345353  } 
346354} 
347- export  function  checkedSequence < T ,  U > ( 
355+ export  function  checkedSequence < const   T ,   const  U > ( 
348356  check : Parser < T > , 
349357  rest : Parser < U > , 
350358) : CheckedParser < readonly  [ T ,  U ] >  { 
351359  return  new  CheckedParser ( check ,  sequence ( check ,  rest ) ) ; 
352360} 
353- export  function  checkedAsWhole < T > ( parser : Parser < T > ) : CheckedParser < T >  { 
361+ export  function  checkedAsWhole < const   T > ( parser : Parser < T > ) : CheckedParser < T >  { 
354362  return  new  CheckedParser ( parser ,  parser ) ; 
355363} 
356- export  function  choiceWithCheck < T > ( 
364+ export  function  choiceWithCheck < const   T > ( 
357365  ...choices : ReadonlyArray < CheckedParser < T > > 
358366) : Parser < T >  { 
359367  return  new  Parser ( ( position )  =>  { 
@@ -369,13 +377,13 @@ export function choiceWithCheck<T>(
369377    return  ArrayResult . errors ( errors ) ; 
370378  } ) ; 
371379} 
372- export  function  optionalWithCheck < T > ( 
380+ export  function  optionalWithCheck < const   T > ( 
373381  parser : CheckedParser < T > , 
374382) : Parser < null  |  T >  { 
375383  return  choiceWithCheck ( parser ,  checkedAsWhole ( nothing ) ) ; 
376384} 
377385export  const  allWithCheck  =  memoize ( 
378-   < T > ( parser : CheckedParser < T > ) : Parser < ReadonlyArray < T > >  => 
386+   < const   T > ( parser : CheckedParser < T > ) : Parser < ReadonlyArray < T > >  => 
379387    choiceWithCheck < ReadonlyArray < T > > ( 
380388      new  CheckedParser ( 
381389        parser . check , 
@@ -385,7 +393,7 @@ export const allWithCheck = memoize(
385393      checkedAsWhole ( emptyArray ) , 
386394    ) , 
387395) ; 
388- export  function  allAtLeastOnceWithCheck < T > ( 
396+ export  function  allAtLeastOnceWithCheck < const   T > ( 
389397  parser : CheckedParser < T > , 
390398) : Parser < ReadonlyArray < T > >  { 
391399  return  sequence ( parser . parser ,  allWithCheck ( parser ) ) 
0 commit comments