anchor.diff:  
       return _mix(color, inverse, weight);
     }));
  +
  +  // ## Opacity
  +
  +  environment.setFunction(new BuiltInCallable.overloaded("alpha", [
  +    r"$color",
  +    r"$args..."
  +  ], [
  +    (arguments) {
  +      var argument = arguments[0];
  +      if (argument is SassString &&
  +          !argument.hasQuotes &&
  +          argument.text.contains(_microsoftFilterStart)) {
  +        // Suport the proprietary Microsoft alpha() function.
  +        return new SassString("alpha($argument)");
  +      }
  +
  +      var color = argument.assertColor("color");
  +      return new SassNumber(color.alpha);
  +    },
  +    (arguments) {
  +      if (arguments.every((argument) =>
  +          argument is SassString &&
  +          !argument.hasQuotes &&
  +          argument.text.contains(_microsoftFilterStart))) {
  +        // Suport the proprietary Microsoft alpha() function.
  +        return new SassString("alpha(${arguments.join(', ')})");
  +      }
  +
  +      assert(arguments.length != 1);
  +      throw new InternalException(
  +          "Only 1 argument allowed, but ${arguments.length} were passed.");
  +    }
  +  ]));
   
     // ## Introspection
   
  
positive.code:   environment.setFunction(
        new BuiltInCallable("invert", r"$color, $weight: 50%", (arguments) {
      if (arguments[0] is SassNumber) {
        return new SassString("invert(${arguments[0]})");
      }
  
  
negative.code: import 'environment.dart';
  import 'exception.dart';
  import 'value.dart';
  
  final _microsoftFilterStart = new RegExp(r'^[a-zA-Z]+\s*=');
  
  void defineCoreFunctions(Environment environment) {
    // ## RGB
  