https://github.com/keil/TreatJS
Tip revision: 231ed8ac396c3e9e4f402c55cea66520edcbb45a authored by keilr on 24 March 2017, 11:15:44 UTC
change version number
change version number
Tip revision: 231ed8a
tmp.polcmorhic.js
//load("test/blame/negation.js");
/*
var A = Contract.Polymorphic.Variable("A");
var B = Contract.Polymorphic.Variable("B");
var C = Contract.Polymorphic.Variable("C");
var F = Contract.AFunction([Contract.Polymorphic.In(A)], Contract.Polymorphic.Out(A));
function id(x) {
//var z = x+1;
return x;
}
var f = Contract.assert(id, F);
print(f(1));
*/
/*
function f (x, y) {
return ''+x+y;
}
var add = Contract.assert(f, Contract.AFunction([typeOfNumber, typeOfNumber], typeOfNumber));
add(1, 2);
TreatJS.Version.print();
TreatJS.Config.print();
TreatJS.Statistic.print();
quit();
*/
// ==================================================
// test polymorphic contracts
//load("contracts/access3.js");
//load("test/access.js");
/*
* Note: A Parametric Contract can be implemented by using
* with (dynamic binding/ value application) or constructores.
* Difference: they were evaluated right away when asserted.
* A Parametric Contract is some kind of delayed constructor,
* that only accepts contracts as agruments.
*/
/*
var A = Contract.Polymorphic.Variable("A");
var B = Contract.Polymorphic.Variable("B");
var C = Contract.Polymorphic.Variable("C");
var V = Contract.Polymorphic.Variables([A,B]);
var F = Contract.AFunction([A,A], A);
//print(F);
var abs = Contract.Abstraction(function (A) {
return Contract.Abstraction(function(B) {
return Contract.AFunction([A,A], B);
});
});
abs(Num)(Bool);
*/