aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md7
-rw-r--r--examples/custom-effect.ts3
-rw-r--r--examples/ffi.ts4
-rw-r--r--examples/file.ts4
-rw-r--r--examples/greeting.ts3
-rw-r--r--examples/guess-number.ts15
-rw-r--r--examples/test-runner.ts8
-rw-r--r--src/context.ts2
-rw-r--r--src/eval.ts2
-rw-r--r--stdlib/effect.ts (renamed from stdlib/io.ts)2
-rw-r--r--stdlib/fs.ts2
-rw-r--r--stdlib/index.ts4
-rw-r--r--stdlib/stdio.ts2
-rw-r--r--stdlib/sys.ts5
-rw-r--r--stdlib/util.ts2
15 files changed, 33 insertions, 32 deletions
diff --git a/README.md b/README.md
index c52e304..2cf14cc 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,8 @@ Take a look at the [./examples](./examples) directory for examples on how to wri
### Example
```typescript
-import { PutString, PutStringLn, Bind, Kind1, ReadLine, Do } from 'ts-types-lang/stdlib'
+import { Bind, Kind1, Do } from 'ts-types-lang/stdlib/effect'
+import { PutString, PutStringLn, ReadLine } from 'ts-types-lang/stdlib/stdio'
// :: string -> Effect ()
interface GreetK extends Kind1<string> {
@@ -23,9 +24,9 @@ export type main = [
To run it -
```bash
-npx tsr ./examples/guess-number.ts
+npx tsr run ./examples/guess-number.ts
// OR
-yarn exec tsr ./examples/guess-number.ts
+yarn exec tsr run ./examples/guess-number.ts
```
diff --git a/examples/custom-effect.ts b/examples/custom-effect.ts
index 3dbe395..f87f242 100644
--- a/examples/custom-effect.ts
+++ b/examples/custom-effect.ts
@@ -1,4 +1,5 @@
-import { Bind, DefineEffect, Effect, Kind1, Print } from '../stdlib'
+import { Bind, DefineEffect, Effect, Kind1 } from '../stdlib/effect'
+import { Print } from '../stdlib/stdio'
interface Mathemagic<_A, _B> extends Effect {}
diff --git a/examples/ffi.ts b/examples/ffi.ts
index 0840ff6..f118085 100644
--- a/examples/ffi.ts
+++ b/examples/ffi.ts
@@ -1,4 +1,6 @@
-import { Bind, Debug, DefineEffect, Effect, JsExpr, Kind1 } from '../stdlib'
+import { Bind, Effect, Kind1 } from '../stdlib/effect'
+import { DefineEffect, JsExpr } from '../stdlib/sys'
+import { Debug } from '../stdlib/stdio'
interface PrintK<Label extends string = ''> extends Kind1 {
return: Debug<Label, this['input']>
diff --git a/examples/file.ts b/examples/file.ts
index 287f108..d91b68a 100644
--- a/examples/file.ts
+++ b/examples/file.ts
@@ -1,4 +1,6 @@
-import { Bind, Kind1, ReadFile, PutStringLn } from '../stdlib'
+import { Bind, Kind1 } from '../stdlib/effect'
+import { PutStringLn } from '../stdlib/stdio'
+import { ReadFile } from '../stdlib/fs'
interface PrintK extends Kind1<string> {
return: PutStringLn<this['input']>
diff --git a/examples/greeting.ts b/examples/greeting.ts
index 20ed4fe..e4c2161 100644
--- a/examples/greeting.ts
+++ b/examples/greeting.ts
@@ -1,4 +1,5 @@
-import { PutString, Bind, Kind1, ReadLine, Seq, PutStringLn } from '../stdlib'
+import { Bind, Kind1, Seq } from '../stdlib/effect'
+import { PutString, ReadLine, PutStringLn } from '../stdlib/stdio'
interface GreetK extends Kind1<string> {
return: Seq<[PutString<'Hello, '>, PutString<`${this['input']}\n`>]>
diff --git a/examples/guess-number.ts b/examples/guess-number.ts
index f03ee10..169805f 100644
--- a/examples/guess-number.ts
+++ b/examples/guess-number.ts
@@ -1,20 +1,13 @@
-import {
- PutString,
- Bind,
- Kind1,
- JsExpr,
- ReadLine,
- Do,
- PutStringLn,
-} from '../stdlib'
+import { Bind, Kind1, Do } from '../stdlib/effect'
+import { PutString, ReadLine, PutStringLn } from '../stdlib/stdio'
+import { JsExpr } from '../stdlib/sys'
export type main = [
PutStringLn<'Guess a number between 0 & 9. You have 5 guesses'>,
Bind<JsExpr<'Math.floor(Math.random() * 10)'>, StartGuessing>
]
-interface AskForGuess<N extends number, Attempts extends 0[]>
- extends Kind1<string> {
+interface AskForGuess<N extends number, Attempts extends 0[]> extends Kind1<string> {
return: `${this['input']}` extends `${N}`
? PutStringLn<'Yay! You got it right!'>
: Do<
diff --git a/examples/test-runner.ts b/examples/test-runner.ts
index c0eb4c4..b06b010 100644
--- a/examples/test-runner.ts
+++ b/examples/test-runner.ts
@@ -1,4 +1,6 @@
-import { DefineEffect, Do, Effect, Print, PutString, PutStringLn } from '../stdlib'
+import { Do, Effect } from '../stdlib/effect'
+import { Print, PutString, PutStringLn } from '../stdlib/stdio'
+import { DefineEffect } from '../stdlib/sys'
type Testi<m extends string, effs extends Effect[]> = [
PutStringLn<m>,
@@ -8,7 +10,9 @@ type Testi<m extends string, effs extends Effect[]> = [
type Equals<Left, Right> =
[Left] extends [Right] ? ([Right] extends [Left] ? true : false) : false
-interface Assert<_B extends true> extends Effect { }
+
+type CompileTimeErrors = false
+interface Assert<_B extends (CompileTimeErrors extends true ? true : boolean)> extends Effect { }
type testCases = [
...Testi<"should do some stuff", [
diff --git a/src/context.ts b/src/context.ts
index e0c0fa5..196c85d 100644
--- a/src/context.ts
+++ b/src/context.ts
@@ -34,7 +34,7 @@ export const createContext = (options: CtxOptions): Ctx => {
)
const getResultExpr = (resultKey?: string) =>
- `${RESULT_TYPE_NAME}[${JSON.stringify(resultKey)}`
+ `(${RESULT_TYPE_NAME}[${JSON.stringify(resultKey)})`
const addResult = (name: string, ty: string): Node | undefined =>
resultTypeNode
diff --git a/src/eval.ts b/src/eval.ts
index 6b9ade0..f6eabf1 100644
--- a/src/eval.ts
+++ b/src/eval.ts
@@ -142,7 +142,7 @@ export const evaluateType = async (
)
const lastResKey = effectResults[effectResults.length - 1]
const [resultKey, _] = ctx.createResult(
- `${ctx.getResultExpr(lastResKey)}['output']`
+ `(${ctx.getResultExpr(lastResKey)})['output']`
)
return [resultKey]
},
diff --git a/stdlib/io.ts b/stdlib/effect.ts
index c37cd32..5be1758 100644
--- a/stdlib/io.ts
+++ b/stdlib/effect.ts
@@ -13,5 +13,3 @@ export interface Seq<_Effs extends Effect[]> extends Effect {}
export interface Do<_Effs extends Effect[]> extends Effect {}
-export interface DefineEffect<_Name extends string, _Func extends string>
- extends Effect {}
diff --git a/stdlib/fs.ts b/stdlib/fs.ts
index f7014ff..fb269c2 100644
--- a/stdlib/fs.ts
+++ b/stdlib/fs.ts
@@ -1,4 +1,4 @@
-import { Effect } from './io'
+import { Effect } from './effect'
export interface WriteFile<_Path extends string, _Content extends string>
extends Effect {}
diff --git a/stdlib/index.ts b/stdlib/index.ts
deleted file mode 100644
index 45197d9..0000000
--- a/stdlib/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export * from './io'
-export * from './fs'
-export * from './stdio'
-export * from './sys'
diff --git a/stdlib/stdio.ts b/stdlib/stdio.ts
index 77aa031..e7d72f3 100644
--- a/stdlib/stdio.ts
+++ b/stdlib/stdio.ts
@@ -1,4 +1,4 @@
-import { Effect } from './io'
+import { Effect } from './effect'
export interface PutString<_ extends string> extends Effect {}
diff --git a/stdlib/sys.ts b/stdlib/sys.ts
index afa5dbd..e170c6c 100644
--- a/stdlib/sys.ts
+++ b/stdlib/sys.ts
@@ -1,7 +1,10 @@
-import { Effect } from './io'
+import { Effect } from './effect'
export interface GetEnv<_Name extends string> extends Effect<string> {}
export interface GetArgs extends Effect<string[]> {}
export interface JsExpr<_Expr extends string> extends Effect<any> {}
+
+export interface DefineEffect<_Name extends string, _Func extends string>
+ extends Effect {}
diff --git a/stdlib/util.ts b/stdlib/util.ts
index 832b0cb..ded9983 100644
--- a/stdlib/util.ts
+++ b/stdlib/util.ts
@@ -1,4 +1,4 @@
-import { Kind1 } from './io'
+import { Kind1 } from './effect'
export type Let<f extends (...args: any) => any> = ReturnType<f>