Проблемы с рекурсивным родовым типом в С#

У меня есть код С#, который компилируется как под моно, так и с компиляторами Microsoft.net, но работает только на моно. Сообщение об ошибке (новые строки добавлены мной)

Unhandled Exception: System.TypeLoadException:
Could not load type 'Hasse.Groups.Heavy.Product.PowerGroup`1'
from assembly 'Hasse, Version=1.0.x.y, Culture=neutral, PublicKeyToken=null'
because it has recursive generic definition.

Тип фактически имеет рекурсивное общее определение, поэтому мой вопрос: почему он работает с моно? [Код запускается и выдает ожидаемый результат]

Полный исходный код здесь: https://github.com/miniBill/Hasse

Уменьшенный код, который по-прежнему падает, находится здесь:

public class Group<T> : IWrappableGroup<WrapperGroup<T>> {}

public class WrapperElement<T> {}

public interface IWrappableGroup<U> {}

public class WrapperGroup<T> : Group<WrapperElement<T>> {}

class MainClass {
    public static void Main(string[] args){
        var ng = new Group<object>();
    }
}

Вот доказательство того, что оно работает на моно: http://ideone.com/ZvA3I

Ответы

Ответ 1

Это известная проблема. Это может быть сообщено как ошибка компилятора.

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf (стр. 129)

Что касается работы в Mono, есть несколько мест, где работа Mono "ломается" в отношении спецификаций.

(Рекурсивные лямбды являются еще одним примером того, что работает в Mono, которое не должно)