contracts.js icon indicating copy to clipboard operation
contracts.js copied to clipboard

contract declarations on functions not of the form "function name(){}"

Open joelmccracken opened this issue 11 years ago • 2 comments

I can't seem to get anything to work except for the named function form. EX:

import @ from "contracts.js"

@ ({name: Str}, [...{loc: Num}]) -> Str
var calcAverageLoc =  }function(person, locArr) {
    var sum = locArr.reduce(function (l1, l2) {
        return l1.loc + l2.loc;
    });
    return "Average lines of code for " +
           person.name + " was " +
           sum / locArr.length;
}


var typoPerson = {nam: "Bob"};
calcAverageLoc(typoPerson, [{loc: 1000}, {loc: 789}, {loc: 9001}]);
SyntaxError: [macro] Macro `@` could not be matched with `() - > Str var...`
9: @ ({name: Str}, [...{loc: Num}]) -> Str
   ^

joelmccracken avatar Oct 10 '14 00:10 joelmccracken

Yeah we need some syntax to wrap an arbitrary expression in a contract. Here are some possibilities:

var f = @ wrap {
  function () { ... }
} in (Num) -> Num

var f = @ wrap {
  function () { ... }
} (Num) -> Num

var f = @ (Num) -> Num wrap {
  function () { ... }
} 

I'm not really excited about any of these. Any ideas?

disnet avatar Oct 10 '14 22:10 disnet

Of all of them, I certainly like the last the best. I was thinking something like:

@wrap (Num) -> Num Foo.prototype.inc = function(val) {...};

would read the next expression and wrap the first function expression it comes to. I don't know how practical that would be though.

On Fri, Oct 10, 2014 at 6:29 PM, Tim Disney [email protected] wrote:

Yeah we need some syntax to wrap an arbitrary expression in a contract. Here are some possibilities:

var f = @ wrap { function () { ... }} in (Num) -> Num var f = @ wrap { function () { ... }} (Num) -> Num var f = @ (Num) -> Num wrap { function () { ... }}

I'm not really excited about any of these. Any ideas?

— Reply to this email directly or view it on GitHub https://github.com/disnet/contracts.js/issues/23#issuecomment-58724258.

joelmccracken avatar Oct 11 '14 19:10 joelmccracken