     ctx.declare name, {arity, docs, type, virtual: yes}
   return
 
+
+ms['instance+'] = ms_instance_export = (ctx, call) ->
+  (call_ (token_ 'export'), [(call_ (token_ 'instance'), (_arguments call))])
+
 ms.instance = ms_instance = (ctx, call) ->
     hasName = requireName ctx, 'Name required to declare a new instance'
 

    (applyKindFn (new TypeConstr dataName, dataKind), typeVars...))
  fieldTypes: (map ((types) -> substituteList freshingSub, types), fieldTypes)

ms.record = ms_record = (ctx, call) ->
    args = _validArguments call
    hasName = requireName ctx, 'Name required to declare new record'

  #   (exportAll ctx, (join (importAny defaultImports), (topLevel ctx, form))))]
  definitions = (join (importAny defaultImports), (topLevel ctx, form))
  shouldBeExported = (name, declaration) ->
    not declaration.virtual and declaration.final
  isExported = (name, exported) ->
    exported
  nonVirtual = filterMap shouldBeExported, ctx._scope()
  exported = concatSets (subtractSets nonVirtual, builtInDefinitions()),
    (filterMap isExported, ctx.submodules) # TODO: separate exporting namespaces according to the separation of namespaces
  exportList = map validIdentifier, (setToArray exported)
  exportDictionary = (jsDictionary exportList, exportList)
  [..., type] = typedModulePath.types
