web-dev-qa-db-fra.com

Comment exécuter un fichier haskell en mode interprété

On m'a dit que vous pouvez interpréter les fichiers haskell (ce qui, je suppose, signifie qu'ils fonctionneront comme Ruby/Python/Perl). Cependant, vous ne pouvez pas trouver l'option de ligne de commande sur ghc. Il veut toujours compiler mon fichier. J'ai également regardé ghci, mais cela me jette toujours dans une réplique.

Je veux simplement faire ghc -i MyFile.hs (où -i est un drapeau composé que je fais semblant corréler au mode interprété) et le faire exécuter afin que je puisse obtenir un retour rapide pendant que j'essaye des idées et que j'apprends.

66
Joshua Cheek
$ runhaskell MyFile.hs

Alternativement, runghc (c'est la même chose). ghci MyFile.hs lancera également une session interactive REPL avec MyFile.hs chargé, mais si vous voulez exécuter un programme principal, runhaskell est le chemin à parcourir.

C'est probablement une bonne idée de prendre l'habitude de tester des parties de votre programme en tant qu'unités isolées dans GHCi plutôt que d'exécuter le tout à chaque fois, mais évidemment pour des scripts plus courts, il est plus simple et plus facile de simplement exécuter le tout.

112
ehird

Vous pouvez avoir un script comme celui-ci:

#!/usr/bin/env runhaskell
main = putStrLn "hello world"

Après avoir rendu le fichier exécutable (c'est-à-dire chmod +x haskell_script), vous pouvez l'exécuter comme n'importe quel autre script Shell.

36
David Miani

Ouvrez l'interpréteur GHC en exécutant ghci dans un terminal, puis chargez un fichier en tapant :load example.hs. Plus de détails dans ce lien .

11
Óscar López

Pour exécuter le code écrit dans un fichier, dites myfile.txt, contenant de simples lignes de code qui fonctionnent dans l'interpréteur GHC, comme:

let a = 0 in a:[1,2]
let x = [1,2] in x ++ [3,4]

tu peux faire:

ghc -e ':script myfile.txt'

Modifier

Sous Windows, des guillemets doubles sont requis:

ghc -e ":script myfile.txt"

Au lieu de cela, on peut également ouvrir GHCi et faire :script myfile.txt.

1
Stéphane Laurent