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 decheckargcount args code>. Mais2 code> n'a pas de sens à l'intérieur dufaire 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 decheckargcount 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.