TropicSapling/triforce

Make variables a subset of functions

Closed this issue · 1 comments

macro func let (var) = (val) {
    return func var {
        val
    };
}

let var = 123;
// becomes:
func var {
    123
}

How would data types work this way? Possible solution; arg pattern matching:

macro func let (T var) = (val) {
    return func var {
        (T) val
    };
}

macro func let (var) = (val) {
    return func var {
        val
    };
}

macro func (T var) = (val) {
    return let T var = val;
}

macro func (var) = (val) {
    return let var = val;
}

let My Special Type var = 123;
My Special Type var = 123;
// both become:
func var -> My Special Type {
    (My Special Type) 123
}

let var = 123;
var = 123;
// both become:
func var {
    123
}

Issue with this: Variables become kind of immutable since functions are. Also, you can't really create functions at runtime like you can with variables.

Variables are now a subset of patterns, and I'm pretty sure I'm keeping it that way, so closing this.