 # Core data-types
 # ---------------
 paws.Thing = Thing = parameterizable class Thing
-   constructor: (elements...) ->
-      it = construct this
+   constructor: constructify(return:@) (elements...) ->
+      @id = uuid.v4()
+      @metadata = new Array
+      @push elements... if elements.length
       
-      it.id = uuid.v4()
-      it.metadata = new Array
-      it.push elements... if elements.length
-      
-      it.metadata.unshift undefined if it._?.noughtify != no
-      
-      return it
+      @metadata.unshift undefined if @_?.noughtify != no
    
    # Creates a copy of the `Thing` it is called on. Alternatively, can be given an extant `Thing`
    # copy this `Thing` *to*, over-writing that `Thing`'s metadata. In the process, the

      if _.isArray(it)
         return it.map (el) => @from el
   
   # TODO: `construct()` (or `constructify()`) this
   constructor: (@to, @isResponsible = false) ->
   
   clone: -> new Relation @to, @isResponsible
   



paws.Label = Label = class Label extends Thing
   constructor: constructify(return:@) (@alien) ->
      @alien = new String @alien
      @alien.native = this
   
   clone: (to) ->
      to ?= new Label
