code: function signal() {
    var handlers = []
  
    notify.add    = add
    notify.once   = once
    notify.remove = remove
  
    return notify
  
  
    // ### Function Signal
    //
    // Notifies all handlers of a signal.
    //
    // :: A... -> ()
    function notify() {
      var args = arguments
      handlers.forEach(function(f){ f.apply(null, args) }) }
  
    // ### Function add
    //
    // Adds a new handler.
    //
    // :: (A... -> B) -> Signal
    function add(f)  {
      if (handlers.every(isnt(f)))  handlers.push(f)
      return notify }
  
    // ### Function once
    //
    // Adds a new handler that'll be executed at most once.
    //
    // :: (A... -> B) -> Signal
    function once(f) {
      add(function() { f.apply(this, arguments)
                       remove(f) })
      return notify }
  
    // ### Function remove
    //
    // Removes a handler.
    //
    // :: (A... -> B) -> Signal
    function remove(f) {
      handlers = handlers.filter(isnt(f))
      return notify }
  }
docs: ### Function signal  Constructs a new signal instance.  :: () -> Signal