2010-08-16 3 views
0

Вы видите способ указать, что мой тип результата должен быть MonadType < Тип arg> в этом интерфейсе?с использованием бесплатного связанного типа типа как параметр типа

interface IMonad<MonadType> // where MonadType : GenricType<> 
{ 
    MonadType<T1> unit<T1>(T1 t) 
    Func<MonadType<T1>, MonadType<T2>> map<T1, T2>(Func<T1, T2> f); 
} 

я получаю как ошибка: Тип параметра «MonadType» не может быть использован с аргументами типа

ответ

0

Нет, вы не можете сделать это с помощью .NET дженериков. Вы хотите указать, что параметр типа MonadType должен иметь один общий параметр; система типа .NET не может представлять это ограничение.

Вот один из подходов к подделке общих монадов в C#: http://sandersn.com/blog//index.php/2010/04/23/faking-type-classes-in-c

Смежные вопросы