2010-09-10 5 views

Répondre

3

La première chose qui saute à l'esprit est enveloppait les membres de System.Enum avec des enveloppes fortement typés:

// gets all underlying values for which an enum is defined 
let definedVals<'a, 'b when 'a : enum<'b>> = 
    System.Enum.GetValues(typeof<'a>) 
    |> Seq.cast<'a> 
    |> Seq.map (LanguagePrimitives.EnumToValue) 

let ints = definedVals<System.ConsoleColor,_> 
+0

devait penser à celui-ci pendant un certain temps, mais comprenez maintenant qu'il est un très bon exemple. Merci. Ce qui m'a intrigué pendant un moment, c'est que System.Enum.GetValues ​​() ne semble pas du tout exiger la contrainte, mais LanguagePrimitives.EnumToValue le fait. Je suppose que c'est dû au fait que le premier est dans l'utilisation générale des bibliothèques .NET et ne peut pas connaître les contraintes F #. D'un autre côté, les contraintes de type ne sont pas uniques à F # (les génériques C# en ont), donc je pense qu'il devrait y avoir un moyen de les faire fonctionner en plusieurs langues. Quoi qu'il en soit, pour ce qui est de ma question initiale, on a répondu. –

Questions connexes