Pourquoi l'interpréteur Haskell (GHCI 7.10.3) a besoin de définitions de fonction pour être dans une expression let, mais le compilateur Haskell (GHC 7.10.3) lève une erreur d'analyseur si un définition de fonction est dans une expression let?Compilé vs Interprété: Laisser ou ne pas laisser
Je travaille à travers "Learn You a Haskell for Great Good!" La première fonction de Baby est doubleMe: doubleMe x = x + x
Pourquoi l'interpréteur accepte-t-il cette définition s'il se trouve dans une expression let et sinon lance une erreur d'analyse sur l'entrée '='? En attendant, si je compile la même fonction à partir d'un fichier, pourquoi GHC lance-t-il une erreur d'analyse si la définition de la fonction est dans une expression let et compile la définition si elle n'est pas dans une expression let? Venant d'un contexte Lisp, je suis surpris que Haskell interactif et le chargement et la compilation de fichiers Haskell traite ces définitions différemment.
C'est une convention. Si GHCi fonctionnait exactement comme dans un fichier .hs, écrire '1 + 1' serait une erreur, ainsi que' print (2,3) '. Au lieu de cela, GCHi a choisi d'utiliser un peu de magie pour accepter à la fois ces expressions et les définitions 'let'. A propos de pourquoi "x = 1" sans laisser est rejeté - Je ne pense pas qu'il y ait une réponse claire à cela, sauf "cela nécessiterait plus de magie". – chi
Droite. FWIW, [IHaskell] (https://github.com/gibiansky/IHaskell) permet de mélanger les deux styles. – leftaroundabout
La nouvelle version de GHCi (8.0.1) accepte 'doubleMe x = x + x'. Assez de gens comme vous se sont plaints qu'ils ont ajouté un cas spécial pour cela. :) – Alec