Skip to content

Instantly share code, notes, and snippets.

@wavebeem
Created July 30, 2015 20:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wavebeem/187ecc982f631750b972 to your computer and use it in GitHub Desktop.
Save wavebeem/187ecc982f631750b972 to your computer and use it in GitHub Desktop.
TC.js example translated into Squiggle
var TC = require('tc');
var add = TC
.takes([TC.Number, TC.Number])
.returns(TC.Number)
.by(function(a, b) { return a + b; });
var getName = TC
.takes([TC.Object(TC.Any)])
.returns(TC.String)
.by(function(obj) { return obj.name; });
var max = TC([TC.Number, TC.Number], TC.Number, Math.max);
add(3, 2); // => 5
add(3, 'x'); // => Error "wrong argument type"
add(); // => Error "wrong number of arguments"
getName({ name: 'Brian' }); // => 'Brian'
getName({ name: null }); // => Error "wrong return type"
max(3, 2); // => 3
max(); // => Error "wrong number of arguments"
let (
TC = require("tc"),
add = TC
.takes([TC.Number, TC.Number])
.returns(TC.Number)
.by(fn(a, b) a + b),
getName = TC
.takes([TC.object(TC.Any)])
.returns(TC.String)
.by(fn(obj) obj.name),
max = TC([TC.Number, TC.Number], TC.Number, Math.max)
) do {
add(3, 2); # => 5
add(3, "x"); # => TC type error
add(); # Squiggle arity error
getName({"name": "Brian"}); # => "Brian"
getName({"name": null}); # => TC return type error
max(3, 2); # => 3
max(); # Squiggle arity error
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment