1- import { Context , Effect , Layer , Ref } from ' effect'
2- import type { Token } from ' src/schemas/token/unions/all'
1+ import { Context , Effect , Layer , Ref } from " effect" ;
2+ import type { Token } from " src/schemas/token/unions/all" ;
33
4- export type LexerStateAll = Effect . Effect . Success < LexerState [ ' getAll' ] >
4+ export type LexerStateAll = Effect . Effect . Success < LexerState [ " getAll" ] > ;
55
66export class LexerState {
7- incPos1 : Effect . Effect < void >
8- decPos1 : Effect . Effect < void >
9- getPos1 : Effect . Effect < number >
10- incPos2 : Effect . Effect < void >
11- getInput : Effect . Effect < string >
12- decPos2 : Effect . Effect < void >
13- getPos2 : Effect . Effect < number >
14- getChar : Effect . Effect < string >
15- setChar : ( newChar : string ) => Effect . Effect < void >
16- setPos1 : ( newPos : number ) => Effect . Effect < void >
17- setPos2 : ( newPos2 : number ) => Effect . Effect < void >
18- setInput : ( newInput : string ) => Effect . Effect < void >
7+ incPos1 : Effect . Effect < void > ;
8+ decPos1 : Effect . Effect < void > ;
9+ getPos1 : Effect . Effect < number > ;
10+ incPos2 : Effect . Effect < void > ;
11+ getInput : Effect . Effect < string > ;
12+ decPos2 : Effect . Effect < void > ;
13+ getPos2 : Effect . Effect < number > ;
14+ getChar : Effect . Effect < string > ;
15+ setChar : ( newChar : string ) => Effect . Effect < void > ;
16+ setPos1 : ( newPos : number ) => Effect . Effect < void > ;
17+ setPos2 : ( newPos2 : number ) => Effect . Effect < void > ;
18+ setInput : ( newInput : string ) => Effect . Effect < void > ;
1919 getAll : Effect . Effect < {
20- input : string
21- pos1 : number
22- pos2 : number
23- char : string
24- } >
25- saveToken : ( token : Token ) => Effect . Effect < void >
26- getTokens : Effect . Effect < Token [ ] >
27- getPos1History : Effect . Effect < number [ ] [ ] >
28- saveToPos1History : ( pos1 : number ) => Effect . Effect < void >
29- getPos2History : Effect . Effect < number [ ] [ ] >
30- saveToPos2History : ( pos2 : number ) => Effect . Effect < void >
20+ input : string ;
21+ pos1 : number ;
22+ pos2 : number ;
23+ char : string ;
24+ } > ;
25+ saveToken : ( token : Token ) => Effect . Effect < void > ;
26+ getTokens : Effect . Effect < Token [ ] > ;
27+ getPos1History : Effect . Effect < number [ ] [ ] > ;
28+ saveToPos1History : ( pos1 : number ) => Effect . Effect < void > ;
29+ getPos2History : Effect . Effect < number [ ] [ ] > ;
30+ saveToPos2History : ( pos2 : number ) => Effect . Effect < void > ;
3131
3232 constructor (
3333 // execution
@@ -40,80 +40,81 @@ export class LexerState {
4040 private pos1History : Ref . Ref < number [ ] [ ] > ,
4141 private pos2History : Ref . Ref < number [ ] [ ] > ,
4242 ) {
43- this . getInput = Ref . get ( this . input )
44- this . getChar = Ref . get ( this . char )
45- this . incPos1 = Ref . update ( this . pos1 , ( n ) => n + 1 )
46- this . decPos1 = Ref . update ( this . pos1 , ( n ) => n - 1 )
47- this . getPos1 = Ref . get ( this . pos1 )
48- this . incPos2 = Ref . update ( this . pos2 , ( n ) => n + 1 )
49- this . decPos2 = Ref . update ( this . pos2 , ( n ) => n - 1 )
50- this . getPos2 = Ref . get ( this . pos2 )
51- this . setChar = ( newChar : string ) => Ref . update ( this . char , ( ) => newChar )
52- this . setPos1 = ( newPos1 : number ) => Ref . update ( this . pos1 , ( ) => newPos1 )
53- this . setPos2 = ( newPos2 : number ) => Ref . update ( this . pos2 , ( ) => newPos2 )
43+ this . getInput = Ref . get ( this . input ) ;
44+ this . getChar = Ref . get ( this . char ) ;
45+ this . incPos1 = Ref . update ( this . pos1 , ( n ) => n + 1 ) ;
46+ this . decPos1 = Ref . update ( this . pos1 , ( n ) => n - 1 ) ;
47+ this . getPos1 = Ref . get ( this . pos1 ) ;
48+ this . incPos2 = Ref . update ( this . pos2 , ( n ) => n + 1 ) ;
49+ this . decPos2 = Ref . update ( this . pos2 , ( n ) => n - 1 ) ;
50+ this . getPos2 = Ref . get ( this . pos2 ) ;
51+ this . setChar = ( newChar : string ) => Ref . update ( this . char , ( ) => newChar ) ;
52+ this . setPos1 = ( newPos1 : number ) => Ref . update ( this . pos1 , ( ) => newPos1 ) ;
53+ this . setPos2 = ( newPos2 : number ) => Ref . update ( this . pos2 , ( ) => newPos2 ) ;
5454 this . setInput = ( newInput : string ) =>
5555 Effect . gen ( function * ( ) {
56- yield * Ref . set ( input , newInput )
57- yield * Ref . set ( pos1 , 0 )
58- yield * Ref . set ( pos2 , 1 )
59- yield * Ref . set ( char , newInput [ 0 ] )
60- } )
56+ yield * Ref . set ( input , newInput ) ;
57+ yield * Ref . set ( pos1 , 0 ) ;
58+ yield * Ref . set ( pos2 , 1 ) ;
59+ yield * Ref . set ( char , newInput [ 0 ] ) ;
60+ } ) ;
6161 this . getAll = Effect . gen ( function * ( ) {
6262 return {
6363 input : yield * Ref . get ( input ) ,
6464 pos1 : yield * Ref . get ( pos1 ) ,
6565 pos2 : yield * Ref . get ( pos2 ) ,
6666 char : yield * Ref . get ( char ) ,
67- }
68- } )
67+ } ;
68+ } ) ;
69+
6970 // Interpretability. TODO: From a perfomance persepective, this should be separate.
7071 // FROM a performace perspective the only true zero-cost intepretability addition
7172 // that is viable would be a clever wrapper thing. (apart from language level ability to fully turn off code.)
72- this . getTokens = Ref . get ( this . tokens )
73+ this . getTokens = Ref . get ( this . tokens ) ;
7374 this . saveToken = ( token : Token ) =>
74- Ref . update ( this . tokens , ( tokens ) => [ ...tokens , token ] )
75- this . getPos1History = Ref . get ( this . pos1History )
76- this . getPos2History = Ref . get ( this . pos2History )
75+ Ref . update ( this . tokens , ( tokens ) => [ ...tokens , token ] ) ;
76+ this . getPos1History = Ref . get ( this . pos1History ) ;
77+ this . getPos2History = Ref . get ( this . pos2History ) ;
7778 this . saveToPos1History = ( pos1 : number ) =>
7879 Effect . gen ( function * ( ) {
79- const tks = yield * Ref . get ( tokens )
80+ const tks = yield * Ref . get ( tokens ) ;
8081 yield * Ref . update ( pos1History , ( pos1History ) => {
81- const tokensLength = tks . length
82+ const tokensLength = tks . length ;
8283 if ( ! Array . isArray ( pos1History [ tokensLength ] ) ) {
83- pos1History . push ( [ pos1 ] )
84+ pos1History . push ( [ pos1 ] ) ;
8485 } else {
85- pos1History [ tokensLength ] . push ( pos1 )
86+ pos1History [ tokensLength ] . push ( pos1 ) ;
8687 }
87- return pos1History
88- } )
89- } )
88+ return pos1History ;
89+ } ) ;
90+ } ) ;
9091 this . saveToPos2History = ( pos2 : number ) =>
9192 Effect . gen ( function * ( ) {
92- const tks = yield * Ref . get ( tokens )
93+ const tks = yield * Ref . get ( tokens ) ;
9394 yield * Ref . update ( pos2History , ( pos2History ) => {
94- const tokensLength = tks . length
95+ const tokensLength = tks . length ;
9596 if ( ! Array . isArray ( pos2History [ tokensLength ] ) ) {
96- pos2History . push ( [ pos2 ] )
97+ pos2History . push ( [ pos2 ] ) ;
9798 } else {
98- pos2History [ tokensLength ] . push ( pos2 )
99+ pos2History [ tokensLength ] . push ( pos2 ) ;
99100 }
100- return pos2History
101- } )
102- } )
101+ return pos2History ;
102+ } ) ;
103+ } ) ;
103104
104105 // Interpretability
105106 }
106107
107108 static make = ( input : Ref . Ref < string > ) =>
108109 Effect . gen ( function * ( ) {
109- const pos1 = yield * Ref . make ( 0 )
110- const pos2 = yield * Ref . make ( 1 )
110+ const pos1 = yield * Ref . make ( 0 ) ;
111+ const pos2 = yield * Ref . make ( 1 ) ;
111112 const char = yield * Ref . make (
112113 yield * Ref . get ( input ) . pipe ( Effect . map ( ( str ) => str [ 0 ] ) ) ,
113- )
114- const tokens = yield * Ref . make < Token [ ] > ( [ ] )
115- const pos1History = yield * Ref . make < number [ ] [ ] > ( [ ] )
116- const pos2History = yield * Ref . make < number [ ] [ ] > ( [ ] )
114+ ) ;
115+ const tokens = yield * Ref . make < Token [ ] > ( [ ] ) ;
116+ const pos1History = yield * Ref . make < number [ ] [ ] > ( [ ] ) ;
117+ const pos2History = yield * Ref . make < number [ ] [ ] > ( [ ] ) ;
117118
118119 return new LexerState (
119120 input ,
@@ -123,21 +124,21 @@ export class LexerState {
123124 tokens ,
124125 pos1History ,
125126 pos2History ,
126- )
127- } )
127+ ) ;
128+ } ) ;
128129}
129130
130- export class LexerStateService extends Context . Tag ( ' LexerStateService' ) <
131+ export class LexerStateService extends Context . Tag ( " LexerStateService" ) <
131132 LexerStateService ,
132133 LexerState
133134> ( ) {
134135 static readonly make = ( input : string ) =>
135136 Layer . effect (
136137 this ,
137138 Effect . andThen ( Ref . make ( input ) , ( inputRef ) => LexerState . make ( inputRef ) ) ,
138- )
139+ ) ;
139140 static readonly Default = Layer . effect (
140141 this ,
141- Effect . andThen ( Ref . make ( '' ) , ( inputRef ) => LexerState . make ( inputRef ) ) ,
142- )
142+ Effect . andThen ( Ref . make ( "" ) , ( inputRef ) => LexerState . make ( inputRef ) ) ,
143+ ) ;
143144}
0 commit comments