J'utilise GHC version 8.0.2 sur Windows 7, & module Debug.Trace
. Dans la trace de la fonction parse
ci-dessous, mon insertion ++ show first
résultats dans l'erreur suivante:Lors du traçage dans Haskell, comment «afficher» une valeur dont le type de données n'est pas connu à la compilation?
- Aucun cas pour (Show a) résultant d'une utilisation du 'show » possible Rectifier: add (Afficher un) au contexte de la signature de type pour: Parse :: Parser a -> String -> [(a, String)]
- Dans le premier argument de
(++)', namely
montrent d'abord » Dans le deuxième argument de(++)', namely
montrent d'abord ++ "," ++ show second ++ ")]" ' Dans le deuxième argument de(++)', namely
"-> [(" ++ ++ montrer d'abord "" ++ montrer deuxième ++ ")]" »
Ma question: est-il un moyen de montrer le premier élément de la paire ordonnée (a,String)
même si son type n'est pas connu à la compilation?
Mon code source est indiqué ci-dessous:
{-# LANGUAGE MonomorphismRestriction #-}
import Data.Typeable
import Data.Char
import Debug.Trace
newtype Parser a = P (String -> [(a,String)])
parse :: Parser a -> String -> [(a,String)]
parse (P p) input | trace
(let result = (p input)
element = head result
first = fst element
second = snd element
in ("parse maps " ++ input ++ " -> [(" ++ show first ++ "," ++ show second ++ ")]")
) False = undefined
parse (P p) input = p input
nextChar :: Parser Char
nextChar = P (\input -> case input of { [] -> [] ; (c:cs) -> [(c,cs)] })
J'espère retracer l'évaluation des parse nextChar "ABCD"
.
Que se passe-t-il si 'a' est effectivement un type non affichable? Soit vous ajoutez une contrainte 'Show', soit vous évitez d'imprimer' first'. Eventuellement, le suffixe 'input' sans le suffixe' second' est déjà une bonne représentation de 'first', de toute façon. – chi
Pas avec 'Debug.Trace', et je ne suis pas au courant des modules qui peuvent le faire (ce serait très difficile à implémenter, car nous devrions fabriquer des dictionnaires' Show' avec très peu d'informations - les types ne sont pas stocké à l'exécution). Mais vous voudrez peut-être vérifier les fonctionnalités de débogage de ['ghci'] (https://downloads.haskell.org/~ghc/7.4.1/docs/html/users_guide/ghci-debugger.html). – luqui