From d5d685253568f8c6855dd873ac3623e0af642d54 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Fri, 6 Jan 2023 23:33:00 +0530 Subject: feat: adds output for custom effects + adds custom effect example for ffi --- src/runtime.ts | 15 +++++++++------ src/stdlib/io.ts | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/runtime.ts b/src/runtime.ts index 91393be..0a65bf3 100644 --- a/src/runtime.ts +++ b/src/runtime.ts @@ -50,7 +50,7 @@ const addResult = (name: string, ty: string): Node | undefined => { } } -const customEffects: Record void> = {} +const customEffects: Record any> = {} const evaluateType = async (effTyp: Type, node: Node): Promise => { const name = effTyp.getSymbol()?.getName() @@ -158,7 +158,7 @@ const evaluateType = async (effTyp: Type, node: Node): Promise => { return [hash] }, - Then: async () => { + Do: async () => { const [effectTyps] = effTyp.getTypeArguments() const effectResults = await evalList(effectTyps?.getTupleElements() ?? [], node) const resultKey = effectResults[effectResults.length - 1] @@ -169,7 +169,12 @@ const evaluateType = async (effTyp: Type, node: Node): Promise => { _: async () => { if (name && customEffects[name]) { - customEffects[name](...effTyp.getTypeArguments()) + const out = await customEffects[name](...effTyp.getTypeArguments()) + if (out) { + const hash = uuid() + addResult(hash, `${JSON.stringify(out)}`) + return [hash] + } } else { console.log(`${name} result effect is unhandled`) } @@ -192,9 +197,7 @@ const main = async () => { if (resultType) { const effects = resultType.isTuple() ? resultType.getTupleElements() : [resultType] - for (const typ of effects) { - await evaluateType(typ, typeRefNode) - } + await evalList(effects, typeRefNode) } } } diff --git a/src/stdlib/io.ts b/src/stdlib/io.ts index d256628..c78204f 100644 --- a/src/stdlib/io.ts +++ b/src/stdlib/io.ts @@ -9,7 +9,7 @@ export interface Bind<_Eff extends Effect, _Fn extends Kind1> extends Effect { } export interface Seq<_Effs extends Effect[]> extends Effect { } -export interface Then<_Effs extends Effect[]> extends Effect { } +export interface Do<_Effs extends Effect[]> extends Effect { } export interface DefineEffect<_Name extends string, _Func extends string> extends Effect { } -- cgit v1.3.1