constructor application

master
Dustin Swan 5 days ago
parent aace8a5a77
commit 232d9351c1
Signed by: dustinswan
GPG Key ID: 30D46587E2100467

@ -65,7 +65,7 @@ export function evaluate(ast: AST, env: Env): Value {
return { return {
kind: 'constructor', kind: 'constructor',
name: ast.name, name: ast.name,
args: [] // TODO: constructors args args: []
}; };
case 'let': { case 'let': {
@ -105,6 +105,16 @@ export function evaluate(ast: AST, env: Env): Value {
const func = evaluate(ast.func, env); const func = evaluate(ast.func, env);
// Constructor application
if (func.kind === 'constructor') {
const argValues = ast.args.map(arg => evaluate(arg, env));
return {
kind: 'constructor',
name: func.name,
args: [...func.args, ...argValues]
};
}
if (func.kind !== 'closure') if (func.kind !== 'closure')
throw new Error('Not a function'); throw new Error('Not a function');

@ -37,3 +37,11 @@ e(`factorial = n \\ n
| n \\ n * factorial (n - 1); | n \\ n * factorial (n - 1);
factorial 5`) factorial 5`)
e(`factorial = n \\ n
| 0 \\ 1
| n \\ n * factorial (n - 1);
factorial 5`)
e('some5 = Some 5; some5');

Loading…
Cancel
Save