           s1.push "            this.RemoveComponent(Component.#{Name}) |> ignore"
           s1.push "            this._#{name}ComponentPool.Push(c)"
           s1.push ""
-          s2.push "    type Matcher with "
           s2.push "        static member #{Name}"
-          s2.push "            with get() = Matcher.AllOf(Component.#{Name}) "
+          s2.push "            with get() = "
+          s2.push "                Matcher.AllOf(Component.#{Name}) "
           s2.push ""
           
     ###
      * Pooled Entities
     ###
-    s3.push "    type World with"
     for Name, pooled of config.entities
+        
+      s3.push "        (** World: #{Name} methods*)"
+        
       if pooled
         name = Name[0].toLowerCase()+Name[1...];
         properties = config.components[Name]

    

params = (args) ->
  sb = []
  for arg in args
    name = arg.split(':')[0]
    type = getType(arg.split(':')[1])
    sb.push "#{name}"
    
  sb.join(', ') 
  

module.exports =

    ###
     * Components List
    ###
    s0.push "    type Component with "
    s1.push "    type Entity with"     
    s1.push ""     
    s2.push "    type Matcher with"
    s3.push "    type World with"
    s3.push ""     
    
    kc = 0
    s0.push ""
    for Name, properties of config.components
      name = Name[0].toLowerCase()+Name[1...]
      s0.push "        static member #{Name} with get() = #{++kc}"    
    s0.push "        static member TotalComponents  with get() = #{++kc}"    
    s0.push ""
  
    
    for Name, properties of config.components
      name = Name[0].toLowerCase()+Name[1...];
      
      s1.push "        (** Entity: #{Name} methods*)"
      
      switch properties
        when false
          s1.push ""
          s1.push "        static member #{name}Component= new #{Name}Component()"
          s1.push ""
