Haskell - Entrée et sortie

Tous les exemples dont nous avons discuté jusqu'à présent sont de nature statique. Dans ce chapitre, nous allons apprendre à communiquer dynamiquement avec les utilisateurs. Nous allons apprendre différentes techniques d'entrée et de sortie utilisées dans Haskell.

Fichiers et flux

Nous avons jusqu'à présent codé en dur toutes les entrées dans le programme lui-même. Nous avons pris des entrées de variables statiques. Maintenant, apprenons à lire et à écrire à partir d'un fichier externe.

Créons un fichier et nommez-le "abc.txt". Ensuite, entrez les lignes suivantes dans ce fichier texte: "Bienvenue dans Tutorialspoint. Ici, vous obtiendrez la meilleure ressource pour apprendre Haskell."

Ensuite, nous écrirons le code suivant qui affichera le contenu de ce fichier sur la console. Ici, nous utilisons la fonction readFile () qui lit un fichier jusqu'à ce qu'il trouve un caractère EOF.

main = do  
   let file = "abc.txt" 
   contents <- readFile file 
   putStrLn contents

Le morceau de code ci-dessus lira le fichier "abc.txt" sous forme de chaîne jusqu'à ce qu'il rencontre un caractère de fin de fichier. Ce morceau de code générera la sortie suivante.

Welcome to Tutorialspoint
Here, you will get the best resource to learn Haskell.

Observez que tout ce qu'il imprime sur le terminal est écrit dans ce fichier.

Argument de ligne de commande

Haskell fournit également la possibilité d'exploiter un fichier via l'invite de commande. Revenons à notre terminal et tapez"ghci". Ensuite, tapez l'ensemble de commandes suivant -

let file = "abc.txt" 
writeFile file "I am just experimenting here." 
readFile file

Ici, nous avons créé un fichier texte appelé "abc.txt". Ensuite, nous avons inséré une instruction dans le fichier à l'aide de la commandewriteFile. Enfin, nous avons utilisé la commandereadFilepour imprimer le contenu du fichier sur la console. Notre code produira la sortie suivante -

I am just experimenting here.

Exceptions

Un exceptionpeut être considéré comme un bogue dans le code. Il s'agit d'une situation où le compilateur n'obtient pas la sortie attendue au moment de l'exécution. Comme tout autre bon langage de programmation, Haskell fournit un moyen d'implémenter la gestion des exceptions.

Si vous êtes familier avec Java, vous connaissez peut-être le bloc Try-Catch où nous lançons généralement une erreur et détectons la même chose dans le catchbloquer. Dans Haskell, nous avons également la même fonction pour détecter les erreurs d'exécution.

La définition de fonction de tryressemble à "try :: Exception e => IO a -> IO (Either ea)". Jetez un œil à l'exemple de code suivant. Il montre comment vous pouvez intercepter l'exception "Divide by Zero".

import Control.Exception 

main = do 
   result <- try (evaluate (5 `div` 0)) :: IO (Either SomeException Int) 
   case result of 
      Left ex   -> putStrLn $ "Caught exception: " ++ show ex 
      Right val -> putStrLn $ "The answer was: " ++ show val

Dans l'exemple ci-dessus, nous avons utilisé la fonction intégrée try fonction de la Control.Exceptionmodule, par conséquent, nous détectons l'exception au préalable. Le morceau de code ci-dessus donnera la sortie ci-dessous à l'écran.

Caught exception: divide by zero