diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/runtime.ts | 15 | ||||
| -rw-r--r-- | src/stdlib/io.ts | 2 |
2 files changed, 10 insertions, 7 deletions
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<string, (...args: Type[]) => void> = {} +const customEffects: Record<string, (...args: Type[]) => any> = {} const evaluateType = async (effTyp: Type, node: Node): Promise<string[]> => { const name = effTyp.getSymbol()?.getName() @@ -158,7 +158,7 @@ const evaluateType = async (effTyp: Type, node: Node): Promise<string[]> => { 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<string[]> => { _: 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 { } |
