     @datatype = 'all'
     for key, val of options
       this[key] = val
+    return @
 
   # Creates a new IP copying its contents by value not reference
   clone: ->

# It is also possible to carry metadata with an IP object.
# For example, the `datatype` and `schema` of the sending
# port is transmitted with the IP object.
module.exports = class IP
  # Valid IP types
  @types: [
    'data'
    'openBracket'
    'closeBracket'
  ]

  # Detects if an arbitrary value is an IP
  @isIP: (obj) ->
    obj and typeof obj is 'object' and obj._isIP is true

  # Creates as new IP object
  # Valid types: 'data', 'openBracket', 'closeBracket'

        ip[key] = JSON.parse JSON.stringify val
      else
        ip[key] = val
    return ip

  # Moves an IP to a different owner
  move: (@owner) ->
    # no-op
    return @

  # Frees IP contents
  drop: ->
    delete this[key] for key, val of @
    return