feat: Implement step one of the roadmap (#1)
Co-authored-by: Glen Whitney <glen@studioinfinity.org> Reviewed-on: #1
This commit is contained in:
parent
4db2d968e4
commit
0430eb6d5c
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
*~
|
@ -3,14 +3,21 @@
|
|||||||
version: '0.0.0',
|
version: '0.0.0',
|
||||||
description: 'Proof of concepts for a PocoMath-adjacent approach to a possible math.ts (TypeScript analogue of mathjs)',
|
description: 'Proof of concepts for a PocoMath-adjacent approach to a possible math.ts (TypeScript analogue of mathjs)',
|
||||||
main: 'index.js',
|
main: 'index.js',
|
||||||
'scripts': {
|
scripts: {
|
||||||
test: 'echo "Error: no test specified" && exit 1'
|
test: 'echo "Error: no test specified" && exit 1',
|
||||||
},
|
},
|
||||||
keywords: ['math', 'typescript'],
|
keywords: [
|
||||||
|
'math',
|
||||||
|
'typescript',
|
||||||
|
],
|
||||||
repository: {
|
repository: {
|
||||||
type: 'git',
|
type: 'git',
|
||||||
url: 'https://code.studioinfinity.org/glen/typomath.git',
|
url: 'https://code.studioinfinity.org/glen/typomath.git',
|
||||||
},
|
},
|
||||||
author: 'Glen Whitney',
|
author: 'Glen Whitney',
|
||||||
license: 'Apache-2.0'
|
license: 'Apache-2.0',
|
||||||
|
dependencies: {
|
||||||
|
'over.ts': 'github:m93a/over.ts',
|
||||||
|
typescript: '^4.8.2',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
23
pnpm-lock.yaml
Normal file
23
pnpm-lock.yaml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
lockfileVersion: 5.4
|
||||||
|
|
||||||
|
specifiers:
|
||||||
|
over.ts: github:m93a/over.ts
|
||||||
|
typescript: ^4.8.2
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
over.ts: github.com/m93a/over.ts/0fd6e18afd4ca5a23c9e09d1fcd6b7357b642247
|
||||||
|
typescript: 4.8.2
|
||||||
|
|
||||||
|
packages:
|
||||||
|
|
||||||
|
/typescript/4.8.2:
|
||||||
|
resolution: {integrity: sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==}
|
||||||
|
engines: {node: '>=4.2.0'}
|
||||||
|
hasBin: true
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
github.com/m93a/over.ts/0fd6e18afd4ca5a23c9e09d1fcd6b7357b642247:
|
||||||
|
resolution: {tarball: https://codeload.github.com/m93a/over.ts/tar.gz/0fd6e18afd4ca5a23c9e09d1fcd6b7357b642247}
|
||||||
|
name: over.ts
|
||||||
|
version: 0.0.0
|
||||||
|
dev: false
|
43
src/steps/one.ts
Normal file
43
src/steps/one.ts
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import { useTypes } from 'over.ts/src/index';
|
||||||
|
|
||||||
|
const types = {
|
||||||
|
number: (x: unknown): x is number => typeof x === 'number',
|
||||||
|
bigint: (x: unknown): x is bigint => typeof x === 'bigint'
|
||||||
|
}
|
||||||
|
|
||||||
|
const overload = useTypes(types)
|
||||||
|
|
||||||
|
const negate = overload({
|
||||||
|
'number -> number': (a: number): number => {
|
||||||
|
console.log('Negating number', a)
|
||||||
|
return -a
|
||||||
|
},
|
||||||
|
'bigint -> bigint': (a: bigint): bigint => {
|
||||||
|
console.log('Negating bigint', a)
|
||||||
|
return -a
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log('Negation of 5 is', negate(5))
|
||||||
|
console.log('Negation of 5n is', negate(5n))
|
||||||
|
|
||||||
|
const add = overload({
|
||||||
|
'number, number -> number': (a: number, b: number): number => {
|
||||||
|
console.log('Adding numbers', a, b)
|
||||||
|
return a+b
|
||||||
|
},
|
||||||
|
'bigint, bigint -> bigint': (a: bigint, b: bigint): bigint => {
|
||||||
|
console.log('Adding bigints', a, b)
|
||||||
|
return a+b
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log('Sum of 5 and 7 is', add(5,7))
|
||||||
|
console.log('Sum of 5n and 7n is', add(5n, 7n))
|
||||||
|
|
||||||
|
try {
|
||||||
|
//@ts-expect-error
|
||||||
|
console.log('Mixed sum is', add(5n, 7))
|
||||||
|
} catch {
|
||||||
|
console.log('Mixed sum errored as expected.')
|
||||||
|
}
|
9
tsconfig.json
Normal file
9
tsconfig.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ES2022",
|
||||||
|
"moduleResolution": "node"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"src/steps/one.ts"
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user