code: function (a) {
  
        // inlined from peanut, maybe a micro-optimisation?
        var constant_a = function () { return a; };
  
        var self = function () {
          // can't Fun.constant this one
          return me;
        };
  
        var map = function (f) {
          return some(f(a));
        };
  
        var bind = function (f) {
          return f(a);
        };
  
        var me = {
          fold: function (n, s) { return s(a); },
          is: function (v) { return a === v; },
          isSome: always,
          isNone: never,
          getOr: constant_a,
          getOrThunk: constant_a,
          getOrDie: constant_a,
          or: self,
          orThunk: self,
          map: map,
          ap: function (optfab) {
            return optfab.fold(none, function(fab) {
              return some(fab(a));
            });
          },
          each: function (f) {
            f(a);
          },
          bind: bind,
          flatten: constant_a,
          exists: bind,
          forall: bind,
          filter: function (f) {
            return f(a) ? me : NONE;
          },
          equals: function (o) {
            return o.is(a);
          },
          equals_: function (o, elementEq) {
            return o.fold(
              never,
              function (b) { return elementEq(a, b); }
            );
          },
          toArray: function () {
            return [a];
          },
          toString: function () {
            return 'some(' + a + ')';
          }
        };
        return me;
      }
docs: some :: a -> Option a