[Haskell-beginners] Using Debug.Trace

legajid legajid at free.fr
Sun Jan 31 04:25:58 EST 2010


Starting with trace, i have trouble  with my calcul'' function while 
calcul' is ok.
When afftrace in calcul'' is commented, the program compiles.
When uncommented (            afftrace ("    calcul'' vide") ), i get 
the following messages :

 *Main> :r
[1 of 1] Compiling Main             ( sud3c.hs, interpreted )

    Couldn't match expected type `[Char]'
           against inferred type `(Plateau, Char)'
    In a stmt of a 'do' expression: afftrace ("    calcul'' vide")
    In the expression:
        do afftrace ("    calcul'' vide")
           (pxv, False)
    In the definition of `calcul''':
        calcul'' pxv _ []
                   = do afftrace ("    calcul'' vide")
                        (pxv, False)
Failed, modules loaded: none.

I don't understand why, in calcul', it's ok and why, in calcul'', it's 
problematic. Because return value of calcul'' is a tuple ?

When my program is ok, should i remove all trace instructions (and 
associated do commands too) or just set  my modetrace value to False ?

Thanks for helping,

Below my code :

calcul' :: Plateau -> [Cellule] -> Plateau
calcul' pxv  [] = do
            afftrace ("  Calcul' vide")
calcul' pxv  (c:cs)=    do
            afftrace ("  Calcul' ok1="++show ok1++" c:cs= "++show (c:cs))
            afftrace ("  "++show xv1)
            if ok1  then do
                    afftrace ("  Calcul' suite")
                    calcul' xv1 cs   
                else do
                    afftrace ("  Calcul' pas de valeur")
        vallib=[1..length pxv]++[5..7]
        nbvlib=length vallib
        (xv1,ok1)=calcul'' pxv c vallib

calcul'' :: Plateau -> Cellule -> [Valeur] -> (Plateau, Bool)
calcul'' pxv  _ [] = do
            --afftrace ("    calcul'' vide")
            (pxv, False)

calcul'' pxv  c (li : lis) = do
                --afftrace ("    "++show pxv)
                --afftrace ("    "++show c ++ "   "++show(li:lis))
                  v2= if (elem li pxv || li==4)
                        calcul'' pxv  c lis
                    else do
                        --afftrace ("      calcul'''")
                        (calcul''' pxv c li, True)

calcul''' :: Plateau -> Cellule -> Valeur -> Plateau
calcul''' pxv c li =
    take (c-1) pxv ++ [li] ++ drop c pxv

afftrace x= if modetrace then trace x " "
             else " "

More information about the Beginners mailing list