diff options
| -rw-r--r-- | README.md | 7 | ||||
| -rw-r--r-- | examples/custom-effect.ts | 3 | ||||
| -rw-r--r-- | examples/ffi.ts | 4 | ||||
| -rw-r--r-- | examples/file.ts | 4 | ||||
| -rw-r--r-- | examples/greeting.ts | 3 | ||||
| -rw-r--r-- | examples/guess-number.ts | 15 | ||||
| -rw-r--r-- | examples/test-runner.ts | 8 | ||||
| -rw-r--r-- | src/context.ts | 2 | ||||
| -rw-r--r-- | src/eval.ts | 2 | ||||
| -rw-r--r-- | stdlib/effect.ts (renamed from stdlib/io.ts) | 2 | ||||
| -rw-r--r-- | stdlib/fs.ts | 2 | ||||
| -rw-r--r-- | stdlib/index.ts | 4 | ||||
| -rw-r--r-- | stdlib/stdio.ts | 2 | ||||
| -rw-r--r-- | stdlib/sys.ts | 5 | ||||
| -rw-r--r-- | stdlib/util.ts | 2 |
15 files changed, 33 insertions, 32 deletions
@@ -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> |
