go = def =>
    Either.fromNullable(def)
      .chain(validate)
      .map(options.get("preprocess", identity))
      .chain(validateProps(validateProp))
      .map(includeOriginalValue)
      .map(mergeGlobal)
      .chain(validateProps(validatePropKeys))
      .chain(transformImports)
      .map(mergeImports)
      .map(formatAliases)
      .chain(
        def =>
          options.get("resolveAliases") === false
            ? Either.of(def)
            : Either.try(resolveNestedAliases)(def)
      )
      .chain(
        def =>
          options.get("resolveAliases") === false
            ? Either.of(def)
            : Either.try(resolveAliases)(def)
      )
      .chain(
        def =>
          options.get("resolveMetaAliases") === false
            ? Either.of(def)
            : Either.try(resolveMetaAliases)(def)
      )
      .map(addPropName)
Transform a definition by merging globals, resolving imports,
resolving aliases, etc