@@ -1,6 +1,11 @@
11// LSP stdio FFI for JavaScript
22import * as fs from 'fs';
3โimport * as $Maybe from '../Data.Maybe/index.js';
3+
4+// PureScript Maybe representation that works for both standard and optimized backends
5+// Standard: { value0: x } for Just, Nothing.value for Nothing
6+// Optimized: { tag: 1, _1: x } for Just, { tag: 0 } for Nothing
7+const mkJust = (x) => ({ tag: 1, _1: x, value0: x });
8+const mkNothing = { tag: 0 };
49
510// Buffer for reading LSP messages
611let buffer = '';
@@ -30,7 +35,7 @@ export const readMessage = () => {
3035 // First check if we already have a complete message in buffer
3136 let msg = tryParseMessage();
3237 if (msg !== null) {
33โ return $Maybe.Just.create(msg);
38+ return mkJust(msg);
3439 }
3540
3641 // Need to read more data synchronously from stdin
@@ -43,18 +48,18 @@ export const readMessage = () => {
4348
4449 if (bytesRead === 0) {
4550 // EOF
46โ return $Maybe.Nothing.value;
51+ return mkNothing;
4752 }
4853
4954 buffer += chunk.toString('utf8', 0, bytesRead);
5055
5156 msg = tryParseMessage();
5257 if (msg !== null) {
53โ return $Maybe.Just.create(msg);
58+ return mkJust(msg);
5459 }
5560 }
5661 } catch (e) {
57โ return $Maybe.Nothing.value;
62+ return mkNothing;
5863 } finally {
5964 fs.closeSync(fd);
6065 }
@@ -75,9 +80,9 @@ export const logMessage = (msg) => () => {
7580// Parse JSON string to Foreign (returns Maybe Foreign)
7681export const parseJSON = (str) => {
7782 try {
78โ return $Maybe.Just.create(JSON.parse(str));
83+ return mkJust(JSON.parse(str));
7984 } catch (e) {
80โ return $Maybe.Nothing.value;
85+ return mkNothing;
8186 }
8287};
8388