def map_with_monad(lam = nil, &blk)
      bind { |v| self.class.unit((lam || blk).call(v)) }
    end
def map_with_monad(lam = nil, &blk)
      bind { |v| self.class.unit((lam || blk).call(v)) }
    end
Returns a monad whose elements are the results of applying the given function to each element in this monad

 NOTE: normally aliased as +map+ when +Monad+ is mixed into a class