2011-04-22 6 views
1

Ma première pensée a été:F # -> Type générique - Multiple non struct

type ManyNavigationPropertyInfo<'a,'b>(cfg:ManyNavigationPropertyConfiguration<'a, 'b>) = 

mais il résout 'a et 'b comme obj, mais il devrait être des classes - donc je l'ai fait:

Type

ManyNavigationPropertyInfo < 'a lorsque' a: pas struct ', b quand' b: non struct> (cfg: ManyNavigationPropertyConfiguration'a, ' b>) =

mais juste une erreur jette disant

symbole inattendu '' dans le nom du type. Attesté '>' ou un autre jeton.

Quelle est la bonne façon de déclarer un tel type?

MISE À JOUR:

Mon code complet est:

type ManyNavigationPropertyInfo<'a,'b>(cfg:ManyNavigationPropertyConfiguration<'a, 'b>) = 
    member x.WithMany (expr: Expr<'a -> ICollection<'b>>) = 
     cfg.WithMany(ToLinq(expr)) 

et il est livré avec 2 erreurs du compilateur dire que 'a et 'b devrait être not struct.

Répondre

4

Votre première pensée est correcte. Vous devriez être en mesure d'écrire simplement:

type ManyNavigationPropertyInfo<'a,'b> 
     (cfg:ManyNavigationPropertyConfiguration<'a, 'b>) = 
    // ... 

Le problème est probablement quelque part plus tard dans le corps du type. De quelque chose que vous avez écrit dans le corps, le compilateur pense que 'a et 'b doivent être de type obj (par exemple vous passez des valeurs de ce type quelque part où obj est prévu, ou probablement quelque chose de plus subtil).

Vous pouvez essayer d'ajouter des annotations de type dans le corps de la classe - cela aide généralement à trouver le problème car le message d'erreur change lorsque vous annotez le bit que le compilateur F # interprète différemment que prévu.

Pour résoudre le problème immédiat dans votre question - la syntaxe de définition de contrainte est un peu différent (d'abord écrire toutes les variables de type, puis contraintes):

type ManyNavigationPropertyInfo<'a, 'b when 'a : not struct and 'b : not struct>(...) 

(Mais si vous pouvez poster plus grande partie du Code , peut-être que quelqu'un peut donner un conseil concret.)

Questions connexes