const AST = require('./ast') const OsloError = require('./osloError') module.exports = { '+': (a, b) => new AST.Number({ value: a.value + b.value }), '-': (a, b) => new AST.Number({ value: a.value - b.value }), '*': (a, b) => new AST.Number({ value: a.value * b.value }), '/': (a, b) => new AST.Number({ value: a.value / b.value }), '=': (a, b) => new AST.Boolean({ value: a.value === b.value }), '>': (a, b) => new AST.Boolean({ value: a.value > b.value }), '<': (a, b) => new AST.Boolean({ value: a.value < b.value }), '>=': (a, b) => new AST.Boolean({ value: a.value >= b.value }), '<=': (a, b) => new AST.Boolean({ value: a.value <= b.value }), list: (...args) => { return new AST.List({ elements: args }) }, length: xs => new AST.Number({ value: xs.elements.length }), cons: (x, xs) => new AST.List({ elements: [x, ...xs.elements] }), head: xs => xs.elements[0], tail: xs => new AST.List({ elements: xs.elements.slice(1) }), }