Skip to content

Commit 7ef3f88

Browse files
save new-work
1 parent ef5bb48 commit 7ef3f88

3 files changed

Lines changed: 130 additions & 133 deletions

File tree

bun.lock

Lines changed: 55 additions & 55 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/services/lexer/state.ts

Lines changed: 75 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
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

66
export 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
}

src/tests/vitest/property/prop.test.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
import { defaultLayer } from "@/layers/default";
22
import { infixOperatorSchema } from "@/schemas/infix-operator";
3-
import { ArrayObj } from "@/schemas/objs/array";
43
import { BooleanObj } from "@/schemas/objs/bool";
54
import { IntegerObj } from "@/schemas/objs/int";
6-
import { Obj } from "@/schemas/objs/union";
75
import { prefixOperatorSchema } from "@/schemas/prefix-operator";
8-
import { TokenType } from "@/schemas/token-types/union";
96
import {
107
OPERATOR_TO_FUNCTION_MAP,
118
PREFIX_OPERATOR_TO_FUNCTION_MAP,
129
} from "@/services/evaluator/constants";
13-
import { objInspect } from "@/services/object";
1410
import { describe, expect, it, layer } from "@effect/vitest";
1511
import { Effect, Match, Schema } from "effect";
1612
import { evalP } from "../utils/eval";

0 commit comments

Comments
 (0)