daggy

Library for creating tagged constructors.

Daggy

Library for creating tagged constructors.

Returns self if it's an instanceof constructor, otherwise creates a new object with constructor's prototype.

Allows creating constructors that can be used with or without the new keyword but always have the correct prototype.

function WrappedArray() {
    var self = daggy.getInstance(this, WrappedArray);
    self._array = [].slice.apply(arguments);
    return self;
}
new WrappedArray(1, 2, 3) instanceof WrappedArray; // true
WrappedArray(1, 2, 3) instanceof WrappedArray; // true

Creates a new constructor with the given field names as arguments and properties. Allows instanceof checks with returned constructor.

var Tuple3 = daggy.tagged('x', 'y', 'z');

var _123 = Tuple3(1, 2, 3); // optional new keyword _123.x == 1 && _123.y == 2 && _123.z == 3; // true _123 instanceof Tuple3; // true

Creates a constructor for each key in constructors. Returns a function with each constructor as a property. Allows instanceof checks for each constructor and the returned function.

var Option = daggy.taggedSum({
    Some: ['x'],
    None: []
});

Option.Some(1) instanceof Option.Some; // true Option.Some(1) instanceof Option; // true Option.None instanceof Option; // true

function incOrZero(o) { return o.cata({ Some: function(x) { return x + 1; }, None: function() { return 0; } }); } incOrZero(Option.Some(1)); // 2 incOrZero(Option.None); // 0