 template and partial names.
 */
 public protocol TemplateRepositoryDataSource {
+    
     /**
     Returns a template ID, that is to say a string that uniquely identifies a
-    template or a template partial. There should be a single template ID for
-    each template.
+    template or a template partial.
     
     The meaning of this String is opaque: your implementation of a
-    TemplateRepositoryDataSource would define, for itself, how strings would
+    `TemplateRepositoryDataSource` would define, for itself, how strings would
     identity a template or a partial. For example, a file-based data source may
-    use paths to the templates as template IDs.
+    use paths to the templates.
+    
+    The return value of this method can be nil: the library user would then
+    eventually get an NSError of domain GRMustacheErrorDomain and code
+    GRMustacheErrorCodeTemplateNotFound.
+    
+    ### Template hierarchies
     
     Whenever relevant, template and partial hierarchies are supported via the
     baseTemplateID parameter: it contains the template ID of the enclosing

    Not all data sources have to implement hierarchies: they can simply ignore
    this parameter.
    
    The return value of this method can be nil: the library user would then
    eventually get an NSError of domain GRMustacheErrorDomain and code
    GRMustacheErrorCodeTemplateNotFound.
    
    :param: name           The name of the template or template partial.
    :param: baseTemplateID The template ID of the enclosing template, or nil.

        repository.reloadTemplates();
        let template = repository.template(named:"profile")!
    
    Warning: previously created Template instances are not reloaded.
    */
    public func reloadTemplates() {
        templateASTCache.removeAll()
