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) }), }