eeue56 / derw

An Elm-inspired language that transpiles to TypeScript
BSD 3-Clause "New" or "Revised" License
373 stars 9 forks source link

[TS] Code generation error #16

Open sharpvik opened 4 months ago

sharpvik commented 4 months ago

The following derw code defines a lambda of type string -> string.

main: string -> string
main = \name -> `Hello ${name}`

Running derw compile on this results in the following output:

function main(_0: string): string {
    return function(name: any) {
        return `Hello ${name}`;
    };
}

which declares that main is a string -> string but in reality, main: string -> any -> string as is evident from the code.

However, using the regular function notation like so

main: string -> string
main name = `Hello ${name}`

fixes the problem:

function main(name: string): string {
    return `Hello ${name}`;
}
eeue56 commented 3 months ago

Thanks for trying Derw out! Lambdas are currently aren't type-checked, though I think fixing it for this specific case makes sense. It's possible to see if the value is a lambda, and if args are missing, they get passed on. Though I would say the general style of Derw is to be explicit with arguments rather than going down the point-free road, so there's also a case for just having it be a compile error to be missing an argument. I'll have a think about it!