2009-12-25 6 views
4

Exemple code:de type Haskell problème jeté

fac :: Int → Int 
fac 0 = 1 
fac n = n * fac (n-1) 

main = do 
     putStrLn show fac 10 

Erreur:

Couldnt match expected type 'String' 
     against inferred type 'a -> String' 
In the first argument of 'putStrLn', namely 'show' 
In the expression: putStrLn show fac 10 

Répondre

25

Ajoutons entre parenthèses pour montrer comment ce code est en fait analysé:

(((putStrLn show) fac) 10) 

Vous donnez show comme l'argument à putStrLn, ce qui est faux parce que show est un fu nction et putStrLn attend une chaîne. Vous voulez qu'il soit comme ceci:

putStrLn (show (fac 10)) 

Vous pouvez soit parenthésée comme ça, ou vous pouvez utiliser l'opérateur $, qui parenthesizes essentiellement tout à droite de celui-ci:

putStrLn $ show $ fac 10 
+1

+1 ' $ 'est votre ami. –

+0

($) et (.) Sont vos amis aimants <3 – codebliss

Questions connexes