goodguide-gibbon 0.3.7 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  module GoodGuide
2
2
  module Gibbon
3
3
  def self.version
4
- '0.3.7'
4
+ '0.3.8'
5
5
  end
6
6
  end
7
7
  end
@@ -71,14 +71,20 @@ module GoodGuide
71
71
  end
72
72
 
73
73
  private
74
+ def inspect_expr(expr)
75
+ obj = JS.default.gibbon[:TypeExpr].fromJSON(expr)
76
+ inspect = obj[:inspect]
77
+ inspect.methodcall(obj)
78
+ end
79
+
74
80
  def semantic_error_message(e)
75
81
  case e['_tag']
76
82
  when 'match'
77
- lhs = e['lhs'].inspect
78
- rhs = e['rhs'].inspect
83
+ lhs = inspect_expr e['lhs']
84
+ rhs = inspect_expr e['rhs']
79
85
  "could not match #{lhs} with #{rhs}"
80
86
  when 'destructure'
81
- type = e['type'].inspect
87
+ type = inspect_expr e['type']
82
88
  "could not destructure #{type}"
83
89
  when 'lookup'
84
90
  query_name = e['query']['name']
@@ -1219,7 +1219,7 @@ parse = Gibbon.parse = (function() {
1219
1219
  return parse;
1220
1220
  })();
1221
1221
  // Generated by CoffeeScript 1.6.3
1222
- var Semantic, Type, TypeLookup, analyze, _ref, _ref1, _ref2,
1222
+ var Semantic, Type, TypeExpr, TypeLookup, analyze, _ref, _ref1, _ref2, _ref3,
1223
1223
  __hasProp = {}.hasOwnProperty,
1224
1224
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
1225
1225
  __slice = [].slice;
@@ -1311,243 +1311,244 @@ Gibbon.Type = Type = (function(_super) {
1311
1311
 
1312
1312
  })(Union);
1313
1313
 
1314
- analyze = Gibbon.analyze = (function() {
1315
- var TypeExpr, generate, solve, _ref3;
1316
- TypeExpr = (function(_super) {
1317
- __extends(TypeExpr, _super);
1314
+ Gibbon.TypeExpr = TypeExpr = (function(_super) {
1315
+ __extends(TypeExpr, _super);
1318
1316
 
1319
- function TypeExpr() {
1320
- _ref3 = TypeExpr.__super__.constructor.apply(this, arguments);
1321
- return _ref3;
1322
- }
1317
+ function TypeExpr() {
1318
+ _ref3 = TypeExpr.__super__.constructor.apply(this, arguments);
1319
+ return _ref3;
1320
+ }
1321
+
1322
+ TypeExpr.types({
1323
+ expr: ['expr'],
1324
+ variable: ['name'],
1325
+ query: ['input', 'scope', 'query'],
1326
+ destructure: ['constraint', 'name', 'argnum'],
1327
+ "native": ['id'],
1328
+ param: ['name', 'constraints'],
1329
+ error: ['type', 'args'],
1330
+ any: []
1331
+ });
1323
1332
 
1324
- TypeExpr.types({
1325
- expr: ['expr'],
1326
- variable: ['name'],
1327
- query: ['input', 'scope', 'query'],
1328
- destructure: ['constraint', 'name', 'argnum'],
1329
- "native": ['id'],
1330
- param: ['name', 'constraints'],
1331
- error: ['type', 'args'],
1332
- any: []
1333
+ TypeExpr.prototype.realize = function() {
1334
+ return this.cases({
1335
+ "native": function(id) {
1336
+ return Type.entity(id);
1337
+ },
1338
+ param: function(name, args) {
1339
+ var arg;
1340
+ return Type[name].apply(Type, (function() {
1341
+ var _i, _len, _results;
1342
+ _results = [];
1343
+ for (_i = 0, _len = args.length; _i < _len; _i++) {
1344
+ arg = args[_i];
1345
+ _results.push(arg.realize());
1346
+ }
1347
+ return _results;
1348
+ })());
1349
+ },
1350
+ other: function() {
1351
+ return Type.abstract(this);
1352
+ }
1333
1353
  });
1354
+ };
1334
1355
 
1335
- TypeExpr.prototype.realize = function() {
1336
- return this.cases({
1337
- "native": function(id) {
1338
- return Type.entity(id);
1339
- },
1340
- param: function(name, args) {
1341
- var arg;
1342
- return Type[name].apply(Type, (function() {
1343
- var _i, _len, _results;
1344
- _results = [];
1345
- for (_i = 0, _len = args.length; _i < _len; _i++) {
1346
- arg = args[_i];
1347
- _results.push(arg.realize());
1348
- }
1349
- return _results;
1350
- })());
1351
- },
1352
- other: function() {
1353
- return Type.abstract(this);
1356
+ TypeExpr.prototype.inspect = function() {
1357
+ return this.cases({
1358
+ expr: function(e) {
1359
+ return "<" + (e.inspect()) + ">";
1360
+ },
1361
+ variable: function(name) {
1362
+ return "%" + name;
1363
+ },
1364
+ query: function(input, _, query) {
1365
+ return "@" + query.type + "(" + query.name + ")[" + (input.inspect()) + "]";
1366
+ },
1367
+ destructure: function(constraint, name, argnum) {
1368
+ return "" + (constraint.inspect()) + "/" + name + "[" + argnum + "]";
1369
+ },
1370
+ "native": function(id) {
1371
+ return "!" + id;
1372
+ },
1373
+ param: function(name, exprs) {
1374
+ var expr;
1375
+ if (!exprs.length) {
1376
+ return "(" + name + ")";
1354
1377
  }
1355
- });
1356
- };
1357
-
1358
- TypeExpr.prototype.inspect = function() {
1359
- return this.cases({
1360
- expr: function(e) {
1361
- return "<" + (e.inspect()) + ">";
1362
- },
1363
- variable: function(name) {
1364
- return "%" + name;
1365
- },
1366
- query: function(input, _, query) {
1367
- return "@" + query.type + "(" + query.name + ")[" + (input.inspect()) + "]";
1368
- },
1369
- destructure: function(constraint, name, argnum) {
1370
- return "" + (constraint.inspect()) + "/" + name + "[" + argnum + "]";
1371
- },
1372
- "native": function(id) {
1373
- return "!" + id;
1374
- },
1375
- param: function(name, exprs) {
1376
- var expr;
1377
- if (!exprs.length) {
1378
- return "(" + name + ")";
1378
+ exprs = (function() {
1379
+ var _i, _len, _results;
1380
+ _results = [];
1381
+ for (_i = 0, _len = exprs.length; _i < _len; _i++) {
1382
+ expr = exprs[_i];
1383
+ _results.push(expr.inspect());
1379
1384
  }
1380
- exprs = (function() {
1381
- var _i, _len, _results;
1382
- _results = [];
1383
- for (_i = 0, _len = exprs.length; _i < _len; _i++) {
1384
- expr = exprs[_i];
1385
- _results.push(expr.inspect());
1386
- }
1387
- return _results;
1388
- })();
1389
- return "(" + name + " " + (exprs.join(' ')) + ")";
1390
- },
1391
- any: function() {
1392
- return '*';
1393
- }
1394
- });
1395
- };
1396
-
1397
- TypeExpr.prototype.equals = function(other) {
1398
- var _this = this;
1399
- if (this._tag !== other._tag) {
1400
- return false;
1385
+ return _results;
1386
+ })();
1387
+ return "(" + name + " " + (exprs.join(' ')) + ")";
1388
+ },
1389
+ any: function() {
1390
+ return '*';
1401
1391
  }
1402
- return this.cases({
1403
- expr: function(e) {
1404
- return e === other.expr;
1405
- },
1406
- query: function(input, scope, query) {
1407
- if (scope !== other.scope) {
1408
- return false;
1409
- }
1410
- if (query !== other.query) {
1411
- return false;
1412
- }
1413
- return input.equals(other.input);
1414
- },
1415
- "native": function(id) {
1416
- return id === other.id;
1417
- },
1418
- param: function(name, constraints) {
1419
- var constraint, i, _i, _len;
1420
- if (name !== other.type) {
1421
- return false;
1422
- }
1423
- for (i = _i = 0, _len = constraints.length; _i < _len; i = ++_i) {
1424
- constraint = constraints[i];
1425
- if (!constraint.equals(other.constraints[i])) {
1426
- return false;
1427
- }
1428
- }
1429
- return true;
1430
- },
1431
- destructure: function(constraint, name, argnum) {
1432
- if (name !== other.type) {
1433
- return false;
1434
- }
1435
- if (argnum !== other.argnum) {
1392
+ });
1393
+ };
1394
+
1395
+ TypeExpr.prototype.equals = function(other) {
1396
+ var _this = this;
1397
+ if (this._tag !== other._tag) {
1398
+ return false;
1399
+ }
1400
+ return this.cases({
1401
+ expr: function(e) {
1402
+ return e === other.expr;
1403
+ },
1404
+ query: function(input, scope, query) {
1405
+ if (scope !== other.scope) {
1406
+ return false;
1407
+ }
1408
+ if (query !== other.query) {
1409
+ return false;
1410
+ }
1411
+ return input.equals(other.input);
1412
+ },
1413
+ "native": function(id) {
1414
+ return id === other.id;
1415
+ },
1416
+ param: function(name, constraints) {
1417
+ var constraint, i, _i, _len;
1418
+ if (name !== other.name) {
1419
+ return false;
1420
+ }
1421
+ for (i = _i = 0, _len = constraints.length; _i < _len; i = ++_i) {
1422
+ constraint = constraints[i];
1423
+ if (!constraint.equals(other.constraints[i])) {
1436
1424
  return false;
1437
1425
  }
1438
- return constraint.equals(other.constraint);
1439
- },
1440
- other: function() {
1441
- return _this === other;
1442
1426
  }
1443
- });
1444
- };
1445
-
1446
- TypeExpr.fromAST = function(typeAST, scope) {
1447
- var e, r;
1448
- r = function(ast) {
1449
- return TypeExpr.fromAST(ast, scope);
1450
- };
1451
- e = TypeExpr;
1452
- return typeAST.cases({
1453
- concrete: function(name) {
1454
- if (typeof Type[name] !== 'function') {
1455
- throw new Error("unknown type " + name);
1456
- }
1457
- return e.param(name, []);
1458
- },
1459
- variable: function(name) {
1460
- return scope.cache(name, function() {
1461
- return e.variable(name);
1462
- });
1463
- },
1464
- "native": function(id) {
1465
- return e["native"](id);
1466
- },
1467
- wildcard: function() {
1468
- return e.any();
1469
- },
1470
- list: function(el) {
1471
- return e.param('list', [r(el)]);
1472
- },
1473
- block: function(el) {
1474
- return e.param('block', [r(el.from), r(el.to)]);
1475
- },
1476
- pair: function(first, second) {
1477
- return e.param('pair', [r(first), r(second)]);
1427
+ return true;
1428
+ },
1429
+ destructure: function(constraint, name, argnum) {
1430
+ if (name !== other.type) {
1431
+ return false;
1478
1432
  }
1479
- });
1433
+ if (argnum !== other.argnum) {
1434
+ return false;
1435
+ }
1436
+ return constraint.equals(other.constraint);
1437
+ },
1438
+ other: function() {
1439
+ return _this === other;
1440
+ }
1441
+ });
1442
+ };
1443
+
1444
+ TypeExpr.fromAST = function(typeAST, scope) {
1445
+ var e, r;
1446
+ r = function(ast) {
1447
+ return TypeExpr.fromAST(ast, scope);
1480
1448
  };
1449
+ e = TypeExpr;
1450
+ return typeAST.cases({
1451
+ concrete: function(name) {
1452
+ if (typeof Type[name] !== 'function') {
1453
+ throw new Error("unknown type " + name);
1454
+ }
1455
+ return e.param(name, []);
1456
+ },
1457
+ variable: function(name) {
1458
+ return scope.cache(name, function() {
1459
+ return e.variable(name);
1460
+ });
1461
+ },
1462
+ "native": function(id) {
1463
+ return e["native"](id);
1464
+ },
1465
+ wildcard: function() {
1466
+ return e.any();
1467
+ },
1468
+ list: function(el) {
1469
+ return e.param('list', [r(el)]);
1470
+ },
1471
+ block: function(el) {
1472
+ return e.param('block', [r(el.from), r(el.to)]);
1473
+ },
1474
+ pair: function(first, second) {
1475
+ return e.param('pair', [r(first), r(second)]);
1476
+ }
1477
+ });
1478
+ };
1481
1479
 
1482
- TypeExpr.fromType = function(t) {
1483
- var st;
1484
- if (t._tag === 'entity') {
1485
- return TypeExpr["native"](t.id);
1480
+ TypeExpr.fromType = function(t) {
1481
+ var st;
1482
+ if (t._tag === 'entity') {
1483
+ return TypeExpr["native"](t.id);
1484
+ }
1485
+ return TypeExpr.param(t._tag, (function() {
1486
+ var _i, _len, _ref4, _results;
1487
+ _ref4 = t._values;
1488
+ _results = [];
1489
+ for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
1490
+ st = _ref4[_i];
1491
+ _results.push(this.fromType(st));
1486
1492
  }
1487
- return TypeExpr.param(t._tag, (function() {
1488
- var _i, _len, _ref4, _results;
1489
- _ref4 = t._values;
1490
- _results = [];
1491
- for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
1492
- st = _ref4[_i];
1493
- _results.push(this.fromType(st));
1494
- }
1495
- return _results;
1496
- }).call(this));
1497
- };
1493
+ return _results;
1494
+ }).call(this));
1495
+ };
1498
1496
 
1499
- TypeExpr.prototype.map = function(f) {
1500
- return this.cases({
1501
- param: function(name, params) {
1502
- var p;
1503
- return TypeExpr.param(name, (function() {
1504
- var _i, _len, _results;
1505
- _results = [];
1506
- for (_i = 0, _len = params.length; _i < _len; _i++) {
1507
- p = params[_i];
1508
- _results.push(f(p));
1509
- }
1510
- return _results;
1511
- })());
1512
- },
1513
- query: function(input, scope, query) {
1514
- return TypeExpr.query(f(input), scope, query);
1515
- },
1516
- destructure: function(constraint, name, argnum) {
1517
- return TypeExpr.destructure(f(constraint), name, argnum);
1518
- },
1519
- other: function() {
1520
- return this;
1521
- }
1522
- });
1523
- };
1497
+ TypeExpr.prototype.map = function(f) {
1498
+ return this.cases({
1499
+ param: function(name, params) {
1500
+ var p;
1501
+ return TypeExpr.param(name, (function() {
1502
+ var _i, _len, _results;
1503
+ _results = [];
1504
+ for (_i = 0, _len = params.length; _i < _len; _i++) {
1505
+ p = params[_i];
1506
+ _results.push(f(p));
1507
+ }
1508
+ return _results;
1509
+ })());
1510
+ },
1511
+ query: function(input, scope, query) {
1512
+ return TypeExpr.query(f(input), scope, query);
1513
+ },
1514
+ destructure: function(constraint, name, argnum) {
1515
+ return TypeExpr.destructure(f(constraint), name, argnum);
1516
+ },
1517
+ other: function() {
1518
+ return this;
1519
+ }
1520
+ });
1521
+ };
1524
1522
 
1525
- TypeExpr.prototype.mapAsync = function(f, cb) {
1526
- return this.cases({
1527
- param: function(name, params) {
1528
- return asyncMap(params, f, function(ps) {
1529
- return cb(TypeExpr.param(name, ps));
1530
- });
1531
- },
1532
- query: function(input, scope, query) {
1533
- return f(input, function(i) {
1534
- return cb(TypeExpr.query(i, scope, query));
1535
- });
1536
- },
1537
- destructure: function(param, name, argnum) {
1538
- return f(param, function(p) {
1539
- return cb(TypeExpr.destructure(p, name, argnum));
1540
- });
1541
- },
1542
- other: function() {
1543
- return cb(this);
1544
- }
1545
- });
1546
- };
1523
+ TypeExpr.prototype.mapAsync = function(f, cb) {
1524
+ return this.cases({
1525
+ param: function(name, params) {
1526
+ return asyncMap(params, f, function(ps) {
1527
+ return cb(TypeExpr.param(name, ps));
1528
+ });
1529
+ },
1530
+ query: function(input, scope, query) {
1531
+ return f(input, function(i) {
1532
+ return cb(TypeExpr.query(i, scope, query));
1533
+ });
1534
+ },
1535
+ destructure: function(param, name, argnum) {
1536
+ return f(param, function(p) {
1537
+ return cb(TypeExpr.destructure(p, name, argnum));
1538
+ });
1539
+ },
1540
+ other: function() {
1541
+ return cb(this);
1542
+ }
1543
+ });
1544
+ };
1547
1545
 
1548
- return TypeExpr;
1546
+ return TypeExpr;
1549
1547
 
1550
- })(Union);
1548
+ })(Union);
1549
+
1550
+ analyze = Gibbon.analyze = (function() {
1551
+ var generate, solve;
1551
1552
  generate = (function() {
1552
1553
  var NativeContext, Scope;
1553
1554
  NativeContext = (function() {
@@ -2027,6 +2028,7 @@ analyze = Gibbon.analyze = (function() {
2027
2028
  return next();
2028
2029
  };
2029
2030
  matchError = function() {
2031
+ DEBUG.logConstraint('!> ', lhs, rhs);
2030
2032
  error('match', lhs, rhs);
2031
2033
  return next();
2032
2034
  };
@@ -2046,6 +2048,7 @@ analyze = Gibbon.analyze = (function() {
2046
2048
  return rhs.cases({
2047
2049
  variable: swap,
2048
2050
  expr: swap,
2051
+ any: swap,
2049
2052
  "native": function(otherId) {
2050
2053
  if (id === otherId) {
2051
2054
  return skip();
@@ -1213,7 +1213,7 @@ parse = Gibbon.parse = (function() {
1213
1213
  return parse;
1214
1214
  })();
1215
1215
  // Generated by CoffeeScript 1.6.3
1216
- var Semantic, Type, TypeLookup, analyze, _ref, _ref1, _ref2,
1216
+ var Semantic, Type, TypeExpr, TypeLookup, analyze, _ref, _ref1, _ref2, _ref3,
1217
1217
  __hasProp = {}.hasOwnProperty,
1218
1218
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
1219
1219
  __slice = [].slice;
@@ -1305,243 +1305,244 @@ Gibbon.Type = Type = (function(_super) {
1305
1305
 
1306
1306
  })(Union);
1307
1307
 
1308
- analyze = Gibbon.analyze = (function() {
1309
- var TypeExpr, generate, solve, _ref3;
1310
- TypeExpr = (function(_super) {
1311
- __extends(TypeExpr, _super);
1308
+ Gibbon.TypeExpr = TypeExpr = (function(_super) {
1309
+ __extends(TypeExpr, _super);
1312
1310
 
1313
- function TypeExpr() {
1314
- _ref3 = TypeExpr.__super__.constructor.apply(this, arguments);
1315
- return _ref3;
1316
- }
1311
+ function TypeExpr() {
1312
+ _ref3 = TypeExpr.__super__.constructor.apply(this, arguments);
1313
+ return _ref3;
1314
+ }
1315
+
1316
+ TypeExpr.types({
1317
+ expr: ['expr'],
1318
+ variable: ['name'],
1319
+ query: ['input', 'scope', 'query'],
1320
+ destructure: ['constraint', 'name', 'argnum'],
1321
+ "native": ['id'],
1322
+ param: ['name', 'constraints'],
1323
+ error: ['type', 'args'],
1324
+ any: []
1325
+ });
1317
1326
 
1318
- TypeExpr.types({
1319
- expr: ['expr'],
1320
- variable: ['name'],
1321
- query: ['input', 'scope', 'query'],
1322
- destructure: ['constraint', 'name', 'argnum'],
1323
- "native": ['id'],
1324
- param: ['name', 'constraints'],
1325
- error: ['type', 'args'],
1326
- any: []
1327
+ TypeExpr.prototype.realize = function() {
1328
+ return this.cases({
1329
+ "native": function(id) {
1330
+ return Type.entity(id);
1331
+ },
1332
+ param: function(name, args) {
1333
+ var arg;
1334
+ return Type[name].apply(Type, (function() {
1335
+ var _i, _len, _results;
1336
+ _results = [];
1337
+ for (_i = 0, _len = args.length; _i < _len; _i++) {
1338
+ arg = args[_i];
1339
+ _results.push(arg.realize());
1340
+ }
1341
+ return _results;
1342
+ })());
1343
+ },
1344
+ other: function() {
1345
+ return Type.abstract(this);
1346
+ }
1327
1347
  });
1348
+ };
1328
1349
 
1329
- TypeExpr.prototype.realize = function() {
1330
- return this.cases({
1331
- "native": function(id) {
1332
- return Type.entity(id);
1333
- },
1334
- param: function(name, args) {
1335
- var arg;
1336
- return Type[name].apply(Type, (function() {
1337
- var _i, _len, _results;
1338
- _results = [];
1339
- for (_i = 0, _len = args.length; _i < _len; _i++) {
1340
- arg = args[_i];
1341
- _results.push(arg.realize());
1342
- }
1343
- return _results;
1344
- })());
1345
- },
1346
- other: function() {
1347
- return Type.abstract(this);
1350
+ TypeExpr.prototype.inspect = function() {
1351
+ return this.cases({
1352
+ expr: function(e) {
1353
+ return "<" + (e.inspect()) + ">";
1354
+ },
1355
+ variable: function(name) {
1356
+ return "%" + name;
1357
+ },
1358
+ query: function(input, _, query) {
1359
+ return "@" + query.type + "(" + query.name + ")[" + (input.inspect()) + "]";
1360
+ },
1361
+ destructure: function(constraint, name, argnum) {
1362
+ return "" + (constraint.inspect()) + "/" + name + "[" + argnum + "]";
1363
+ },
1364
+ "native": function(id) {
1365
+ return "!" + id;
1366
+ },
1367
+ param: function(name, exprs) {
1368
+ var expr;
1369
+ if (!exprs.length) {
1370
+ return "(" + name + ")";
1348
1371
  }
1349
- });
1350
- };
1351
-
1352
- TypeExpr.prototype.inspect = function() {
1353
- return this.cases({
1354
- expr: function(e) {
1355
- return "<" + (e.inspect()) + ">";
1356
- },
1357
- variable: function(name) {
1358
- return "%" + name;
1359
- },
1360
- query: function(input, _, query) {
1361
- return "@" + query.type + "(" + query.name + ")[" + (input.inspect()) + "]";
1362
- },
1363
- destructure: function(constraint, name, argnum) {
1364
- return "" + (constraint.inspect()) + "/" + name + "[" + argnum + "]";
1365
- },
1366
- "native": function(id) {
1367
- return "!" + id;
1368
- },
1369
- param: function(name, exprs) {
1370
- var expr;
1371
- if (!exprs.length) {
1372
- return "(" + name + ")";
1372
+ exprs = (function() {
1373
+ var _i, _len, _results;
1374
+ _results = [];
1375
+ for (_i = 0, _len = exprs.length; _i < _len; _i++) {
1376
+ expr = exprs[_i];
1377
+ _results.push(expr.inspect());
1373
1378
  }
1374
- exprs = (function() {
1375
- var _i, _len, _results;
1376
- _results = [];
1377
- for (_i = 0, _len = exprs.length; _i < _len; _i++) {
1378
- expr = exprs[_i];
1379
- _results.push(expr.inspect());
1380
- }
1381
- return _results;
1382
- })();
1383
- return "(" + name + " " + (exprs.join(' ')) + ")";
1384
- },
1385
- any: function() {
1386
- return '*';
1387
- }
1388
- });
1389
- };
1390
-
1391
- TypeExpr.prototype.equals = function(other) {
1392
- var _this = this;
1393
- if (this._tag !== other._tag) {
1394
- return false;
1379
+ return _results;
1380
+ })();
1381
+ return "(" + name + " " + (exprs.join(' ')) + ")";
1382
+ },
1383
+ any: function() {
1384
+ return '*';
1395
1385
  }
1396
- return this.cases({
1397
- expr: function(e) {
1398
- return e === other.expr;
1399
- },
1400
- query: function(input, scope, query) {
1401
- if (scope !== other.scope) {
1402
- return false;
1403
- }
1404
- if (query !== other.query) {
1405
- return false;
1406
- }
1407
- return input.equals(other.input);
1408
- },
1409
- "native": function(id) {
1410
- return id === other.id;
1411
- },
1412
- param: function(name, constraints) {
1413
- var constraint, i, _i, _len;
1414
- if (name !== other.type) {
1415
- return false;
1416
- }
1417
- for (i = _i = 0, _len = constraints.length; _i < _len; i = ++_i) {
1418
- constraint = constraints[i];
1419
- if (!constraint.equals(other.constraints[i])) {
1420
- return false;
1421
- }
1422
- }
1423
- return true;
1424
- },
1425
- destructure: function(constraint, name, argnum) {
1426
- if (name !== other.type) {
1427
- return false;
1428
- }
1429
- if (argnum !== other.argnum) {
1386
+ });
1387
+ };
1388
+
1389
+ TypeExpr.prototype.equals = function(other) {
1390
+ var _this = this;
1391
+ if (this._tag !== other._tag) {
1392
+ return false;
1393
+ }
1394
+ return this.cases({
1395
+ expr: function(e) {
1396
+ return e === other.expr;
1397
+ },
1398
+ query: function(input, scope, query) {
1399
+ if (scope !== other.scope) {
1400
+ return false;
1401
+ }
1402
+ if (query !== other.query) {
1403
+ return false;
1404
+ }
1405
+ return input.equals(other.input);
1406
+ },
1407
+ "native": function(id) {
1408
+ return id === other.id;
1409
+ },
1410
+ param: function(name, constraints) {
1411
+ var constraint, i, _i, _len;
1412
+ if (name !== other.name) {
1413
+ return false;
1414
+ }
1415
+ for (i = _i = 0, _len = constraints.length; _i < _len; i = ++_i) {
1416
+ constraint = constraints[i];
1417
+ if (!constraint.equals(other.constraints[i])) {
1430
1418
  return false;
1431
1419
  }
1432
- return constraint.equals(other.constraint);
1433
- },
1434
- other: function() {
1435
- return _this === other;
1436
1420
  }
1437
- });
1438
- };
1439
-
1440
- TypeExpr.fromAST = function(typeAST, scope) {
1441
- var e, r;
1442
- r = function(ast) {
1443
- return TypeExpr.fromAST(ast, scope);
1444
- };
1445
- e = TypeExpr;
1446
- return typeAST.cases({
1447
- concrete: function(name) {
1448
- if (typeof Type[name] !== 'function') {
1449
- throw new Error("unknown type " + name);
1450
- }
1451
- return e.param(name, []);
1452
- },
1453
- variable: function(name) {
1454
- return scope.cache(name, function() {
1455
- return e.variable(name);
1456
- });
1457
- },
1458
- "native": function(id) {
1459
- return e["native"](id);
1460
- },
1461
- wildcard: function() {
1462
- return e.any();
1463
- },
1464
- list: function(el) {
1465
- return e.param('list', [r(el)]);
1466
- },
1467
- block: function(el) {
1468
- return e.param('block', [r(el.from), r(el.to)]);
1469
- },
1470
- pair: function(first, second) {
1471
- return e.param('pair', [r(first), r(second)]);
1421
+ return true;
1422
+ },
1423
+ destructure: function(constraint, name, argnum) {
1424
+ if (name !== other.type) {
1425
+ return false;
1472
1426
  }
1473
- });
1427
+ if (argnum !== other.argnum) {
1428
+ return false;
1429
+ }
1430
+ return constraint.equals(other.constraint);
1431
+ },
1432
+ other: function() {
1433
+ return _this === other;
1434
+ }
1435
+ });
1436
+ };
1437
+
1438
+ TypeExpr.fromAST = function(typeAST, scope) {
1439
+ var e, r;
1440
+ r = function(ast) {
1441
+ return TypeExpr.fromAST(ast, scope);
1474
1442
  };
1443
+ e = TypeExpr;
1444
+ return typeAST.cases({
1445
+ concrete: function(name) {
1446
+ if (typeof Type[name] !== 'function') {
1447
+ throw new Error("unknown type " + name);
1448
+ }
1449
+ return e.param(name, []);
1450
+ },
1451
+ variable: function(name) {
1452
+ return scope.cache(name, function() {
1453
+ return e.variable(name);
1454
+ });
1455
+ },
1456
+ "native": function(id) {
1457
+ return e["native"](id);
1458
+ },
1459
+ wildcard: function() {
1460
+ return e.any();
1461
+ },
1462
+ list: function(el) {
1463
+ return e.param('list', [r(el)]);
1464
+ },
1465
+ block: function(el) {
1466
+ return e.param('block', [r(el.from), r(el.to)]);
1467
+ },
1468
+ pair: function(first, second) {
1469
+ return e.param('pair', [r(first), r(second)]);
1470
+ }
1471
+ });
1472
+ };
1475
1473
 
1476
- TypeExpr.fromType = function(t) {
1477
- var st;
1478
- if (t._tag === 'entity') {
1479
- return TypeExpr["native"](t.id);
1474
+ TypeExpr.fromType = function(t) {
1475
+ var st;
1476
+ if (t._tag === 'entity') {
1477
+ return TypeExpr["native"](t.id);
1478
+ }
1479
+ return TypeExpr.param(t._tag, (function() {
1480
+ var _i, _len, _ref4, _results;
1481
+ _ref4 = t._values;
1482
+ _results = [];
1483
+ for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
1484
+ st = _ref4[_i];
1485
+ _results.push(this.fromType(st));
1480
1486
  }
1481
- return TypeExpr.param(t._tag, (function() {
1482
- var _i, _len, _ref4, _results;
1483
- _ref4 = t._values;
1484
- _results = [];
1485
- for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
1486
- st = _ref4[_i];
1487
- _results.push(this.fromType(st));
1488
- }
1489
- return _results;
1490
- }).call(this));
1491
- };
1487
+ return _results;
1488
+ }).call(this));
1489
+ };
1492
1490
 
1493
- TypeExpr.prototype.map = function(f) {
1494
- return this.cases({
1495
- param: function(name, params) {
1496
- var p;
1497
- return TypeExpr.param(name, (function() {
1498
- var _i, _len, _results;
1499
- _results = [];
1500
- for (_i = 0, _len = params.length; _i < _len; _i++) {
1501
- p = params[_i];
1502
- _results.push(f(p));
1503
- }
1504
- return _results;
1505
- })());
1506
- },
1507
- query: function(input, scope, query) {
1508
- return TypeExpr.query(f(input), scope, query);
1509
- },
1510
- destructure: function(constraint, name, argnum) {
1511
- return TypeExpr.destructure(f(constraint), name, argnum);
1512
- },
1513
- other: function() {
1514
- return this;
1515
- }
1516
- });
1517
- };
1491
+ TypeExpr.prototype.map = function(f) {
1492
+ return this.cases({
1493
+ param: function(name, params) {
1494
+ var p;
1495
+ return TypeExpr.param(name, (function() {
1496
+ var _i, _len, _results;
1497
+ _results = [];
1498
+ for (_i = 0, _len = params.length; _i < _len; _i++) {
1499
+ p = params[_i];
1500
+ _results.push(f(p));
1501
+ }
1502
+ return _results;
1503
+ })());
1504
+ },
1505
+ query: function(input, scope, query) {
1506
+ return TypeExpr.query(f(input), scope, query);
1507
+ },
1508
+ destructure: function(constraint, name, argnum) {
1509
+ return TypeExpr.destructure(f(constraint), name, argnum);
1510
+ },
1511
+ other: function() {
1512
+ return this;
1513
+ }
1514
+ });
1515
+ };
1518
1516
 
1519
- TypeExpr.prototype.mapAsync = function(f, cb) {
1520
- return this.cases({
1521
- param: function(name, params) {
1522
- return asyncMap(params, f, function(ps) {
1523
- return cb(TypeExpr.param(name, ps));
1524
- });
1525
- },
1526
- query: function(input, scope, query) {
1527
- return f(input, function(i) {
1528
- return cb(TypeExpr.query(i, scope, query));
1529
- });
1530
- },
1531
- destructure: function(param, name, argnum) {
1532
- return f(param, function(p) {
1533
- return cb(TypeExpr.destructure(p, name, argnum));
1534
- });
1535
- },
1536
- other: function() {
1537
- return cb(this);
1538
- }
1539
- });
1540
- };
1517
+ TypeExpr.prototype.mapAsync = function(f, cb) {
1518
+ return this.cases({
1519
+ param: function(name, params) {
1520
+ return asyncMap(params, f, function(ps) {
1521
+ return cb(TypeExpr.param(name, ps));
1522
+ });
1523
+ },
1524
+ query: function(input, scope, query) {
1525
+ return f(input, function(i) {
1526
+ return cb(TypeExpr.query(i, scope, query));
1527
+ });
1528
+ },
1529
+ destructure: function(param, name, argnum) {
1530
+ return f(param, function(p) {
1531
+ return cb(TypeExpr.destructure(p, name, argnum));
1532
+ });
1533
+ },
1534
+ other: function() {
1535
+ return cb(this);
1536
+ }
1537
+ });
1538
+ };
1539
+
1540
+ return TypeExpr;
1541
1541
 
1542
- return TypeExpr;
1542
+ })(Union);
1543
1543
 
1544
- })(Union);
1544
+ analyze = Gibbon.analyze = (function() {
1545
+ var generate, solve;
1545
1546
  generate = (function() {
1546
1547
  var NativeContext, Scope;
1547
1548
  NativeContext = (function() {
@@ -1999,6 +2000,7 @@ analyze = Gibbon.analyze = (function() {
1999
2000
  return next();
2000
2001
  };
2001
2002
  matchError = function() {
2003
+
2002
2004
  error('match', lhs, rhs);
2003
2005
  return next();
2004
2006
  };
@@ -2018,6 +2020,7 @@ analyze = Gibbon.analyze = (function() {
2018
2020
  return rhs.cases({
2019
2021
  variable: swap,
2020
2022
  expr: swap,
2023
+ any: swap,
2021
2024
  "native": function(otherId) {
2022
2025
  if (id === otherId) {
2023
2026
  return skip();
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: goodguide-gibbon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-14 00:00:00.000000000 Z
12
+ date: 2013-08-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: therubyracer
@@ -55,7 +55,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
55
55
  version: '0'
56
56
  segments:
57
57
  - 0
58
- hash: 3075766379386117662
58
+ hash: 2444619293848573990
59
59
  required_rubygems_version: !ruby/object:Gem::Requirement
60
60
  none: false
61
61
  requirements:
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
64
  version: '0'
65
65
  segments:
66
66
  - 0
67
- hash: 3075766379386117662
67
+ hash: 2444619293848573990
68
68
  requirements: []
69
69
  rubyforge_project: goodguide-gibbon
70
70
  rubygems_version: 1.8.23