feat: Initial core of picomath

Implements a totally simplistic "poortf" mutable typed function and
  a picomath instance generator, as well as the very beginnings of a
  number type and one generic function and a default full picomath instance.

  Also provides some tests which serve as usage examples.
This commit is contained in:
Glen Whitney 2022-03-25 00:49:03 -07:00
parent 36cc91ca95
commit 536656bfe8
14 changed files with 1627 additions and 2 deletions

6
number/add.js Normal file
View file

@ -0,0 +1,6 @@
import { allNumbers } from './number.js'
export default function create(pmath) {
return pmath('add', [allNumbers,
(...addends) => addends.reduce((x,y) => x+y, 0)])
}

12
number/all.js Normal file
View file

@ -0,0 +1,12 @@
import createNumber from './number.js'
import createAdd from './add.js'
import createNegate from './negate.js'
import createSubtract from '../generic/subtract.js'
export default function create(pmath) {
createNumber(pmath)
createAdd(pmath)
createNegate(pmath)
createSubtract(pmath)
// not sure if there's anything reasonable to return here
}

7
number/negate.js Normal file
View file

@ -0,0 +1,7 @@
import { oneNumber } from './number.js'
export default function create(pmath) {
return pmath('negate', [oneNumber, n => -n])
}

14
number/number.js Normal file
View file

@ -0,0 +1,14 @@
export function allNumbers(args) {
for (let i = 0; i < args.length; ++i) {
if (typeof args[i] !== 'number') return false
}
return true
}
export function oneNumber(args) {
return args.length === 1 && typeof args[0] === 'number'
}
export default function create(pmath) {
return pmath('number', [() => true, x => Number(x)])
}