Comment opaue type violations

This commit is contained in:
Umur Ozkul 2022-08-19 23:01:38 +02:00
parent bc86988453
commit 05ce6d2872

View File

@ -17,68 +17,69 @@ import { tagged, tag } from "./types";
// This file is here to compensate for genType not fully recursively converting types // This file is here to compensate for genType not fully recursively converting types
// Raw rescript types. // Raw rescript types.
export type rescriptExport = // Umur: Rescript expression values are opaque!
| 0 // EvVoid // export type rescriptExport =
| { // | 0 // EvVoid
TAG: 0; // EvArray // | {
_0: rescriptExport[]; // TAG: 0; // EvArray
} // _0: rescriptExport[];
| { // }
TAG: 1; // EvString // | {
_0: string[]; // TAG: 1; // EvString
} // _0: string[];
| { // }
TAG: 2; // EvBool // | {
_0: boolean; // TAG: 2; // EvBool
} // _0: boolean;
| { // }
TAG: 3; // EvCall // | {
_0: string; // TAG: 3; // EvCall
} // _0: string;
| { // }
TAG: 4; // EvDistribution // | {
_0: rescriptDist; // TAG: 4; // EvDistribution
} // _0: rescriptDist;
| { // }
TAG: 5; // EvLambda // | {
_0: lambdaValue; // TAG: 5; // EvLambda
} // _0: lambdaValue;
| { // }
TAG: 6; // EvNumber // | {
_0: number; // TAG: 6; // EvNumber
} // _0: number;
| { // }
TAG: 7; // EvRecord // | {
_0: { [key: string]: rescriptExport }; // TAG: 7; // EvRecord
} // _0: { [key: string]: rescriptExport };
| { // }
TAG: 8; // EvString // | {
_0: string; // TAG: 8; // EvString
} // _0: string;
| { // }
TAG: 9; // EvSymbol // | {
_0: string; // TAG: 9; // EvSymbol
} // _0: string;
| { // }
TAG: 10; // EvDate // | {
_0: Date; // TAG: 10; // EvDate
} // _0: Date;
| { // }
TAG: 11; // EvTimeDuration // | {
_0: number; // TAG: 11; // EvTimeDuration
} // _0: number;
| { // }
TAG: 12; // EvDeclaration // | {
_0: rescriptLambdaDeclaration; // TAG: 12; // EvDeclaration
} // _0: rescriptLambdaDeclaration;
| { // }
TAG: 13; // EvTypeIdentifier // | {
_0: string; // TAG: 13; // EvTypeIdentifier
} // _0: string;
| { // }
TAG: 14; // EvModule // | {
_0: { [key: string]: rescriptExport }; // TAG: 14; // EvModule
}; // _0: { [key: string]: rescriptExport };
// };
type rescriptDist = type rescriptDist =
| { TAG: 0; _0: rescriptPointSetDist } | { TAG: 0; _0: rescriptPointSetDist }
@ -116,86 +117,88 @@ type rescriptDeclarationArg =
max: Date; max: Date;
}; };
export type squiggleExpression = // Umur: Squiggle expressions are opaque!
| tagged<"symbol", string> // export type squiggleExpression =
| tagged<"string", string> // | tagged<"symbol", string>
| tagged<"call", string> // | tagged<"string", string>
| tagged<"lambda", lambdaValue> // | tagged<"call", string>
| tagged<"array", squiggleExpression[]> // | tagged<"lambda", lambdaValue>
| tagged<"arraystring", string[]> // | tagged<"array", squiggleExpression[]>
| tagged<"boolean", boolean> // | tagged<"arraystring", string[]>
| tagged<"distribution", Distribution> // | tagged<"boolean", boolean>
| tagged<"number", number> // | tagged<"distribution", Distribution>
| tagged<"date", Date> // | tagged<"number", number>
| tagged<"timeDuration", number> // | tagged<"date", Date>
| tagged<"lambdaDeclaration", lambdaDeclaration> // | tagged<"timeDuration", number>
| tagged<"record", { [key: string]: squiggleExpression }> // | tagged<"lambdaDeclaration", lambdaDeclaration>
| tagged<"type", { [key: string]: squiggleExpression }> // | tagged<"record", { [key: string]: squiggleExpression }>
| tagged<"typeIdentifier", string> // | tagged<"type", { [key: string]: squiggleExpression }>
| tagged<"module", { [key: string]: squiggleExpression }> // | tagged<"typeIdentifier", string>
| tagged<"void", string>; // | tagged<"module", { [key: string]: squiggleExpression }>
// | tagged<"void", string>;
export { lambdaValue }; export { lambdaValue };
export function convertRawToTypescript( // Umur: Opaque type no conversion!
result: rescriptExport, // export function convertRawToTypescript(
environment: environment // result: rescriptExport,
): squiggleExpression { // environment: environment
if (typeof result === "number") { // ): squiggleExpression {
// EvVoid // if (typeof result === "number") {
return tag("void", ""); // // EvVoid
} // return tag("void", "");
switch (result.TAG) { // }
case 0: // EvArray // switch (result.TAG) {
return tag( // case 0: // EvArray
"array", // return tag(
result._0.map((x) => convertRawToTypescript(x, environment)) // "array",
); // result._0.map((x) => convertRawToTypescript(x, environment))
case 1: // EvArrayString // );
return tag("arraystring", result._0); // case 1: // EvArrayString
case 2: // EvBool // return tag("arraystring", result._0);
return tag("boolean", result._0); // case 2: // EvBool
case 3: // EvCall // return tag("boolean", result._0);
return tag("call", result._0); // case 3: // EvCall
case 4: // EvDistribution // return tag("call", result._0);
return tag( // case 4: // EvDistribution
"distribution", // return tag(
new Distribution( // "distribution",
convertRawDistributionToGenericDist(result._0), // new Distribution(
environment // convertRawDistributionToGenericDist(result._0),
) // environment
); // )
case 5: // EvDistribution // );
return tag("lambda", result._0); // case 5: // EvDistribution
case 6: // EvNumber // return tag("lambda", result._0);
return tag("number", result._0); // case 6: // EvNumber
case 7: // EvRecord // return tag("number", result._0);
return tag( // case 7: // EvRecord
"record", // return tag(
_.mapValues(result._0, (x) => convertRawToTypescript(x, environment)) // "record",
); // _.mapValues(result._0, (x) => convertRawToTypescript(x, environment))
case 8: // EvString // );
return tag("string", result._0); // case 8: // EvString
case 9: // EvSymbol // return tag("string", result._0);
return tag("symbol", result._0); // case 9: // EvSymbol
case 10: // EvDate // return tag("symbol", result._0);
return tag("date", result._0); // case 10: // EvDate
case 11: // EvTimeDuration // return tag("date", result._0);
return tag("number", result._0); // case 11: // EvTimeDuration
case 12: // EvDeclaration // return tag("number", result._0);
return tag("lambdaDeclaration", { // case 12: // EvDeclaration
fn: result._0.fn, // return tag("lambdaDeclaration", {
args: result._0.args.map(convertDeclaration), // fn: result._0.fn,
}); // args: result._0.args.map(convertDeclaration),
case 13: // EvSymbol // });
return tag("typeIdentifier", result._0); // case 13: // EvSymbol
case 14: // EvModule // return tag("typeIdentifier", result._0);
return tag( // case 14: // EvModule
"module", // return tag(
_.mapValues(result._0, (x) => convertRawToTypescript(x, environment)) // "module",
); // _.mapValues(result._0, (x) => convertRawToTypescript(x, environment))
} // );
} // }
// }
function convertDeclaration( function convertDeclaration(
declarationArg: rescriptDeclarationArg declarationArg: rescriptDeclarationArg