anchor.diff:  Map<String, Object> variableToMap(VariableMirror mm, DeclarationMirror from,
       bool forceAbstract) {
     var map = new Map();
  -  map[keyType] = typeToMap(mm.type, from); // TODO what about void?
  +  map[keyType] = typeToMap(mm.type, from);
   
     if (!mm.isFinal && !mm.isConst) {
       map["\$set"] = { keyMetatype : metatypeSetter };
  
positive.code:       map["\$pt"] = "f";
        // Don't erase! Callable's are generic, so there is no automatic
        // type erasure.
        map[keyType] = typeToMap(pt.returnType, from, false, false);
        map[keyMetatype] = metatypeParameter;
        map[keyName] = MirrorSystem.getName(pm.simpleName);
        List plist = parametersToList(pt.parameters, from);
        if (plist.isNotEmpty) {
          map[keyParams] = [plist];
        }
      }
      else {
        map[keyType] = typeToMap(pm.type, from);
        map[keyMetatype] = metatypeParameter;
        map[keyName] = MirrorSystem.getName(pm.simpleName);
  
negative.code: }
  
  List<Map<String, Object>> typeArgumentMap(
      Iterable<DeclarationMirror> typeArguments, DeclarationMirror from, bool isCovariant) {
    return typeArguments.where((tm) => tm is TypeMirror).map((tm) {
      var map = typeToMap(tm, from, false, false, isCovariant); // keyModule, keyName
      map[keyMetatype] = metatypeTypeParameter;
      return map;
    }).toList();
  }
  
  Map<String, Object> typeToMap(
      TypeMirror tm, DeclarationMirror from,
        [bool isClass = false, bool erase = true, bool isCovariant = true]) {
  
    // FIXME tm is null sometimes
  
  