Disons que j'ai un type mytype défini dans le module my.Module. Je veux avoir la chaîne "my.module.mype" (ou quelque chose comme ça). Si je viens de taper la chaîne directement, je pourrais avoir une faute de frappe, et si le module ou le nom de type change, j'aimerais savoir à l'heure de la compilation.
ah, il semble y avoir une confusion sur ce que je demande . S'il vous plaît regarder attentivement la question. Compte tenu du code: p> la sortie que je veux est: p> Je cherche le nom de type, non la définition de type. typeof produirait la sortie int et telle, ce n'est pas ce que je veux. p> p>
4 Réponses :
standard Haskell ne prend pas en charge cela pour les noms de type; Seulement pour les noms de foncteurs avec dérivant montrent code>. Vous pourrez peut-être obtenir des noms de type comme des chaînes à l'aide de Modèle HASKELL . P>
Oui, je suppose que ce modèle Haskell peut être nécessaire.
En résumé, la réponse consiste à activer le modèle HASKELL et à utiliser si votre type dérive Si vous souhaitez obtenir des types de certaines fonctions polymorphes, le paquet polytypeable sur Hackage vous permet de le faire: http://hackage.hakell.org/packages/archive/polytypeable/0.1.0.0/doc/html/data-polytypeable.html P> Il s'agit d'une sorte de chose de type de type insane écrit par Oleg et emballé par Lennart, pensez-vous. Et il a .. des bizarreries. Le plus criant est que cela ne peut pas vous donner (ni imaginer comment quelque chose pourrait, franchement) des contextes de contrainte de classe. Donc, le spectacle recevra un type de Si vous en avez besoin de plus que cela, et êtes satisfait de faire certaines choses uniquement à la compilation, puis utilisez le modèle HASKELL pour extraire des informations de type directement à partir de GHC. est le seul moyen d'aller. Voir ' code> et
' '' code>
typable code> (que GHC peut faire automatiquement), vous pouvez simplement appeler
typeof code> à partir de
data.typeable code> pour obtenir une représentation montroyable. P>
A -> chaîne code> plutôt que
Forall a. Afficher A => A -> String Code>. P>
réifier code> et
info code> en particulier: http://hakage.hakell.org/packages/archive/template-haskell/2.5.0.0/doc/html/language-hakell-th.html < / a> p> p>
Section 7.5.3 du manuel GHC Documents this: haskell.org/ghc/docs/latest/html/users_guide/...
@taotree. Quelle est la chaîne de type d'un type polymorphe? Voulez-vous dire par rapport aux signatures de fonction de Vis? Donc, vous pouvez obtenir dactyestr id = a -> A code>?
Je m'excuse pour la confusion. J'ai essayé de réitérer la question de souligner ce que j'essaie d'obtenir. typeof n'est pas ce que je veux. Je veux le nom pleinement qualifié, pas la définition de type.
Ok, la réinciation m'a emmené pour nom qui m'a pris à ', ce dont j'avais besoin.
Vous ne pouvez pas définir themagique en fonction (puisqu'il aurait besoin d'un argument de type), mais vous pouvez vous rapprocher.
import Data.Typeable ... putStrLn $ show $ typeOf (undefined :: MyType)
Vous pouvez utiliser un proxy code> pour ceci:
Que voulez-vous utiliser cette chaîne? Votre programme devrait vous donner des erreurs compiler si vous utilisez le nom de type incorrect dans votre code.
Je veux une chaîne de nom de type, pas le type lui-même. Il est utilisé pour afficher le nom de type et l'utiliser pour correspondre à des noms de type UP etc.