La ligne checkargcount args code> me donne le problème.
args code> est un type
[string] code> n'est-ce pas? Je suis confus pourquoi cela me donne une erreur.
3 Réponses :
Un Vous devez soit modifier le type de principal code> est déclaré avoir le type
io () code> (ce qui est correct). La dernière expression dans n'importe quelle fonction est la valeur de retour. Ce code particulier renvoie le résultat de
checkargcount args code>, qui est
int code>. P>
int code> La valeur n'est pas une valeur
io () code>, de sorte que cela ne tape pas la vérification. P>
checkargcount code> pour renvoyer
() code> ou
io () code> ou ajoutez plus de code à
principal code> qui utilise le
int code> renvoyé par
checkargcount code>. p>
oui, Donc, il s'agit du type de sortie, pas du type d'entrée de cette fonction. P>
Changer args :: [string] code>, mais
checkargcount args code> doit avoir type
io () code>, étant la dernière ligne du < Code> DO CODE> Block avec le type global
io () code>. p>
2 code> à
Imprimer 2 code> dans le
si code> est conséquent "de manière à résoudre ce problème (et bien sûr changer la signature de type de
CheckARGCount code> pour adapter le changement). P>
args <- getArgs if (length args) /= 2 then return() else do -- ..continue coding Proved to be far simpler solution
Pensez à utiliser system.exit.die code> ou quelque chose de similaire au lieu de
retour () code>.
Notez que lorsqu'il y a deux arguments, votre code simplifie
DO args <- getargs; 2 code> où le 2 est le résultat de
checkargcount args code>. Mais
2 code> n'a pas de sens à l'intérieur du
faire code>, car ce n'est pas une action à effectuer. En effet, c'est la question. À mon avis,
checkargcount code> a le mauvais type: pourquoi devrait vérifier quelque chose de retourner un int?
retour $ $ checkargcount args code>, mais en code réel,
checkargcount args code> ne sera pas la dernière chose que vous appelez, alors vous voulez probablement faire autre chose avec la valeur de retour de
checkargcount code>.
La notation code> peut être confondre lorsque vous commencez, au cas où vous ne le saviez pas déjà, le wiki a un bon page dessus.