Yes. The second one does seem to be a bug.

Here’s a corrected patch to reproduce that:


diff --git 
a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/ISort.as
 
b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/ISort.as
index 14073e1da9..d39c9a3b46 100644
--- 
a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/ISort.as
+++ 
b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/ISort.as
@@ -123,13 +123,13 @@ public interface ISort {
      *  @playerversion AIR 2.6
      *  @productversion Flex 4.5
      */
-    function get compareFunction():Function;
+    function get compareFunction():(a:Object, b:Object, fields?:Array)=>int;
 
     /**
      *  @deprecated A future release of Apache Flex SDK will remove this 
function. Please use the constructor
      *  argument instead.
      */
-    function set compareFunction(value:Function):void;
+    function set compareFunction(value:(a:Object, b:Object, 
fields?:Array)=>int):void;
 
     /**
      *  An <code>Array</code> of <code>ISortField</code> objects that
@@ -280,7 +280,7 @@ public interface ISort {
             values:Object,
             mode:String,
             returnInsertionIndex:Boolean = false,
-            compareFunction:Function = null):int;
+            compareFunction:(a:Object, b:Object, fields?:Array)=>int = 
null):int;
 
     /**
      *  Return whether the specified property is used to control the sort.



diff --git 
a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/Sort.as
 
b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/Sort.as
index d16869fa1f..caf80b6559 100644
--- 
a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/Sort.as
+++ 
b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/Sort.as
@@ -186,7 +186,7 @@ public class Sort extends EventDispatcher implements ISort
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-    public function Sort(fields:Array = null, customCompareFunction:Function = 
null, unique:Boolean = false)
+    public function Sort(fields:Array = null, customCompareFunction:(a:Object, 
b:Object, fields?:Array)=>int = null, unique:Boolean = false)
     {
         super();
 
@@ -236,7 +236,7 @@ public class Sort extends EventDispatcher implements ISort
      *  @private
      *  Storage for the compareFunction property.
      */
-    private var _compareFunction:Function;
+    private var _compareFunction:(a:Object, b:Object, fields?:Array)=>int;
 
     /**
      *  @private
@@ -253,7 +253,7 @@ public class Sort extends EventDispatcher implements ISort
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-    public function get compareFunction():Function
+    public function get compareFunction():(a:Object, b:Object, 
fields?:Array)=>int
     {
         return usingCustomCompareFunction ? _compareFunction : internalCompare;
     }
@@ -261,7 +261,7 @@ public class Sort extends EventDispatcher implements ISort
     /**
      *  @private
      */
-    public function set compareFunction(value:Function):void
+    public function set compareFunction(value:(a:Object, b:Object, 
fields?:Array)=>int):void
     {
         _compareFunction = value;
         usingCustomCompareFunction = _compareFunction != null;
@@ -376,9 +376,9 @@ public class Sort extends EventDispatcher implements ISort
                              values:Object,
                              mode:String,
                              returnInsertionIndex:Boolean = false,
-                             compareFunction:Function = null):int
+                             compareFunction:(a:Object, b:Object, 
fields?:Array)=>int = null):int
     {
-        var compareForFind:Function;
+        var compareForFind:(a:Object, b:Object, fields?:Array)=>int;
         var fieldsForCompare:Array;
         var message:String;
 
@@ -615,7 +615,7 @@ public class Sort extends EventDispatcher implements ISort
             // the Sort.internalCompare function knows to use Sort._fields; 
that same logic
             // needs to be part of calling a custom compareFunction. Of 
course, a user shouldn't
             // be doing this -- so I wrap calls to compareFunction with 
_fields as the last parameter
-            const fixedCompareFunction:Function =
+            const fixedCompareFunction:(a:Object, b:Object)=>int =
                     function (a:Object, b:Object):int
                     {
                         // append our fields to the call, since items.sort() 
won't
@@ -760,7 +760,7 @@ public class Sort extends EventDispatcher implements ISort
             var len:int = fields ? fields.length : _fields.length;
             while (result == 0 && (i < len))
             {
-                var sf:ISortField = ISortField(_fields[i]);
+                var sf:ISortField = (_fields[i] as ISortField);
                 result = sf.compareFunction(a, b);
                 if (sf.descending)
                     result *= -1;



> On Jan 30, 2026, at 5:17 PM, Josh Tynjala <[email protected]> wrote:
> 
>> Error: Implicit coercion of a value of type (a:Object,b:Object)=>int to
> an unrelated type (values:Object,obj:Object,fieldsForCompare?:Array)=>int.
> 
> This error appears to be correct because you have omitted the third
> parameter. The argument may be omitted only when calling the function. It
> can’t be omitted when defining the function. You’d have a similar error if
> an interface had an optional parameter, and you tried to define a method on
> an implementing class that didn’t include the optional parameter.
> 
>> Error: Implicit coercion of a value of type Function to an unrelated type
> (values:Object,obj:Object,fieldsForCompare?:Array)=>int.
> 
> This one seems like it might be a bug, though. The compiler may be ignoring
> the function type expression somewhere.
> 
> 
> --
> Josh Tynjala
> Bowler Hat LLC
> https://bowlerhat.dev/
> 
> 
> On Fri, Jan 30, 2026 at 5:10 AM Harbs <[email protected]> wrote:
> 
>> I tried to use them in the Sort classes, and I got the following error.
>> 
>> Is this user error or a bug?
>> 
>> 
>>     [java]
>> /Users/harbs/Apache/royale-asjs/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/Sort.as(397):
>> col: 30 Error: Implicit coercion of a value of type Function to an
>> unrelated type (values:Object,obj:Object,fieldsForCompare?:Array)=>int.
>>     [java]
>>     [java]             compareForFind = this.compareFunction;
>>     [java]                              ^
>>     [java]
>>     [java]
>> /Users/harbs/Apache/royale-asjs/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/Sort.as(619):
>> col: 21 Error: Implicit coercion of a value of type
>> (a:Object,b:Object)=>int to an unrelated type
>> (values:Object,obj:Object,fieldsForCompare?:Array)=>int.
>>     [java]
>>     [java]                     function (a:Object, b:Object):int
>>     [java]                     ^
>>     [java]
>>     [java]
>> /Users/harbs/Apache/royale-asjs/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/Sort.as(397):
>> col: 30 Implicit coercion of a value of type Function to an unrelated type
>> (values:Object,obj:Object,fieldsForCompare?:Array)=>int.
>>     [java]
>>     [java]             compareForFind = this.compareFunction;
>>     [java]                              ^
>>     [java]
>>     [java]
>> /Users/harbs/Apache/royale-asjs/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/Sort.as(619):
>> col: 21 Implicit coercion of a value of type (a:Object,b:Object)=>int to an
>> unrelated type (values:Object,obj:Object,fieldsForCompare?:Array)=>int.
>>     [java]
>>     [java]                     function (a:Object, b:Object):int
>>     [java]                     ^
>> 
>> 
>> Changes:
>> 
>> diff --git
>> a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/ISort.as
>> b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/ISort.as
>> index 14073e1da9..02a7bcc86d 100644
>> ---
>> a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/ISort.as
>> +++
>> b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/ISort.as
>> @@ -123,13 +123,13 @@ public interface ISort {
>>      *  @playerversion AIR 2.6
>>      *  @productversion Flex 4.5
>>      */
>> -    function get compareFunction():Function;
>> +    function get compareFunction():(values:Object, obj:Object,
>> fieldsForCompare?:Array) => int;
>> 
>>     /**
>>      *  @deprecated A future release of Apache Flex SDK will remove this
>> function. Please use the constructor
>>      *  argument instead.
>>      */
>> -    function set compareFunction(value:Function):void;
>> +    function set compareFunction(value:(values:Object, obj:Object,
>> fieldsForCompare?:Array) => int):void;
>> 
>>     /**
>>      *  An <code>Array</code> of <code>ISortField</code> objects that
>> 
>> 
>> diff --git
>> a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/Sort.as
>> b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/Sort.as
>> index d16869fa1f..abec999093 100644
>> ---
>> a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/Sort.as
>> +++
>> b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/Sort.as
>> @@ -186,7 +186,7 @@ public class Sort extends EventDispatcher implements
>> ISort
>>      *  @playerversion AIR 2.6
>>      *  @productversion Royale 0.0
>>      */
>> -    public function Sort(fields:Array = null,
>> customCompareFunction:Function = null, unique:Boolean = false)
>> +    public function Sort(fields:Array = null,
>> customCompareFunction:(values:Object, obj:Object, fieldsForCompare?:Array)
>> => int = null, unique:Boolean = false)
>>     {
>>         super();
>> 
>> @@ -236,7 +236,7 @@ public class Sort extends EventDispatcher implements
>> ISort
>>      *  @private
>>      *  Storage for the compareFunction property.
>>      */
>> -    private var _compareFunction:Function;
>> +    private var _compareFunction:(values:Object, obj:Object,
>> fieldsForCompare?:Array) => int;
>> 
>>     /**
>>      *  @private
>> @@ -253,7 +253,7 @@ public class Sort extends EventDispatcher implements
>> ISort
>>      *  @playerversion AIR 2.6
>>      *  @productversion Royale 0.0
>>      */
>> -    public function get compareFunction():Function
>> +    public function get compareFunction():(values:Object, obj:Object,
>> fieldsForCompare?:Array) => int
>>     {
>>         return usingCustomCompareFunction ? _compareFunction :
>> internalCompare;
>>     }
>> @@ -261,7 +261,7 @@ public class Sort extends EventDispatcher implements
>> ISort
>>     /**
>>      *  @private
>>      */
>> -    public function set compareFunction(value:Function):void
>> +    public function set compareFunction(value:(values:Object, obj:Object,
>> fieldsForCompare?:Array) => int):void
>>     {
>>         _compareFunction = value;
>>         usingCustomCompareFunction = _compareFunction != null;
>> @@ -376,9 +376,9 @@ public class Sort extends EventDispatcher implements
>> ISort
>>                              values:Object,
>>                              mode:String,
>>                              returnInsertionIndex:Boolean = false,
>> -                             compareFunction:Function = null):int
>> +                             compareFunction:(values:Object, obj:Object,
>> fieldsForCompare?:Array) => int = null):int
>>     {
>> -        var compareForFind:Function;
>> +        var compareForFind:(values:Object, obj:Object,
>> fieldsForCompare?:Array) => int;
>>         var fieldsForCompare:Array;
>>         var message:String;
>> 
>> @@ -615,7 +615,7 @@ public class Sort extends EventDispatcher implements
>> ISort
>>             // the Sort.internalCompare function knows to use
>> Sort._fields; that same logic
>>             // needs to be part of calling a custom compareFunction. Of
>> course, a user shouldn't
>>             // be doing this -- so I wrap calls to compareFunction with
>> _fields as the last parameter
>> -            const fixedCompareFunction:Function =
>> +            const fixedCompareFunction:(values:Object, obj:Object,
>> fieldsForCompare?:Array) => int =
>>                     function (a:Object, b:Object):int
>>                     {
>>                         // append our fields to the call, since
>> items.sort() won't
>> 
>> 

Reply via email to