2010-08-16 7 views
0

Voyez-vous un moyen de spécifier que mon type de résultat doit être MonadType < arg type> dans cette interface?en utilisant le type générique lié libre comme paramètre de type

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

Je reçois comme une erreur: Le paramètre type « MonadType » ne peut pas être utilisé avec des arguments de type

Répondre

0

Non, vous ne pouvez pas le faire avec les génériques .NET. Ce que vous voulez faire est de spécifier que le paramètre de type MonadType doit lui-même avoir un paramètre générique; le système de type .NET ne peut pas représenter cette contrainte.

Voici une approche pour truquer des monades génériques en C#: http://sandersn.com/blog//index.php/2010/04/23/faking-type-classes-in-c

Questions connexes