function Id(a) {
    this.value = a;
}

// Semigroup (value must also be a Semigroup)
Id.prototype.concat = function(b) {
    return new Id(this.value.concat(b.value));
};

// Monoid (value must also be a Monoid)
Id.prototype.empty = function() {
    return new Id(this.value.empty ? this.value.empty() : this.value.constructor.empty());
};

// Functor
Id.prototype.map = function(f) {
    return new Id(f(this.value));
};

// Applicative
Id.prototype.ap = function(b) {
    return new Id(this.value(b.value));
};

// Chain
Id.prototype.chain = function(f) {
    return f(this.value);
};

// Monad
Id.of = function(a) {
    return new Id(a);
};

if(typeof module == 'object') module.exports = Id;

@@ -589,60 +589,195 @@
 %0A// 
-Monad%0AId.of = function(a) %7B%0A    return new Id(a);%0A%7D;
+Extend%0AId.prototype.extend = function(f)%7B%0A  return new Id(f(this.value));%0A%7D%0A%0A// Monad%0AId.of = function(a) %7B%0A    return new Id(a);%0A%7D;%0A%0A// Comonad%0AId.from = function(a)%7B%0A  return a.value;%0A%7D
 %0A%0Aif

Add extend and from to Id spec