node package manager

daggy

Library for creating tagged constructors.

Daggy

Library for creating tagged constructors.

daggy.getInstance(self, constructor)

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 

daggy.tagged(arguments)

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 

daggy.taggedSum(constructors)

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