functionalscript
Advanced tools
Comparing version 0.0.130 to 0.0.131
@@ -52,7 +52,7 @@ const { todo } = require('../') | ||
/** @typedef {typeof value} T */ | ||
/** @type {(node: N<T>) => Result<T>} */ | ||
const f = node => { | ||
switch (node.length) { | ||
/** @type {(n: N<T>) => Result<T>} */ | ||
const f = n => { | ||
switch (n.length) { | ||
case 1: { | ||
const [v] = node | ||
const [v] = n | ||
switch (cmp(v)) { | ||
@@ -65,3 +65,3 @@ case -1: return { replace: [value, v] } | ||
case 2: { | ||
const [v0, v1] = node | ||
const [v0, v1] = n | ||
switch (cmp(v0)) { | ||
@@ -78,3 +78,3 @@ case -1: return { overflow: [[value], v0, [v1]] } | ||
case 3: { | ||
const [n0, v01, n1] = node | ||
const [n0, v01, n1] = n | ||
switch (cmp(v01)) { | ||
@@ -97,26 +97,26 @@ case -1: { | ||
} | ||
const [n0, v01, n1, v12, n2] = node | ||
const [n0, v01, n1, v12, n2] = n | ||
/** @type {(asReplace: (replace: N<T>) => N5<T>) => (asOverflow: (overflow: N3<T>) => N3<T>) => (node: N<T>) => Result<T>} */ | ||
const merge = asReplace => asOverflow => node => { | ||
const result = f(node) | ||
if ('found' in result) { return result } | ||
if ('replace' in result) { return { replace: asReplace(result.replace) } } | ||
return { overflow: asOverflow(result.overflow) } | ||
} | ||
switch (cmp(v01)) { | ||
case -1: { | ||
const result = f(n0) | ||
if ('found' in result) { return result } | ||
if ('replace' in result) { return { replace: [result.replace, v01, n1, v12, n2] } } | ||
return { overflow: [result.overflow, v01, [n1, v12, n2]] } | ||
} | ||
case -1: return merge | ||
(replace => [replace, v01, n1, v12, n2]) | ||
(overflow => [overflow, v01, [n1, v12, n2]]) | ||
(n0) | ||
case 0: return { found: v01 } | ||
} | ||
switch (cmp(v12)) { | ||
case -1: { | ||
const result = f(n1) | ||
if ('found' in result) { return result } | ||
if ('replace' in result) { return { replace: [n0, v01, result.replace, v12, n2] } } | ||
const [n10, v101, n11] = result.overflow | ||
return { overflow: [[n0, v01, n10], v101, [n11, v12, n2]] } | ||
} | ||
case 1: { | ||
const result = f(n2) | ||
if ('found' in result) { return result } | ||
if ('replace' in result) { return { replace: [n0, v01, n1, v12, result.replace] } } | ||
return { overflow: [[n0, v01, n1], v12, result.overflow] } | ||
} | ||
case -1: return merge | ||
(replace => [n0, v01, replace, v12, n2]) | ||
(([n10, v101, n11]) => [[n0, v01, n10], v101, [n11, v12, n2]]) | ||
(n1) | ||
case 1: merge | ||
(replace => [n0, v01, n1, v12, replace]) | ||
(overflow => [[n0, v01, n1], v12, overflow]) | ||
(n2) | ||
} | ||
@@ -123,0 +123,0 @@ return { found: v12 } |
{ | ||
"name": "functionalscript", | ||
"version": "0.0.130", | ||
"version": "0.0.131", | ||
"description": "FunctionalScript is a functional subset of JavaScript", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
61301