aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2023-01-06 23:33:00 +0530
committerAkshay Nair <phenax5@gmail.com>2023-01-06 23:35:33 +0530
commitd5d685253568f8c6855dd873ac3623e0af642d54 (patch)
tree3274f8eb52e64e60ab86080f20a55339f4ca5e35 /src
parent4d82623f191042c362ddd2ad5e8ded99d5854169 (diff)
downloadts-types-lang-d5d685253568f8c6855dd873ac3623e0af642d54.tar.gz
ts-types-lang-d5d685253568f8c6855dd873ac3623e0af642d54.zip
feat: adds output for custom effects + adds custom effect example for ffi
Diffstat (limited to 'src')
-rw-r--r--src/runtime.ts15
-rw-r--r--src/stdlib/io.ts2
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 { }