33 votes

Pourquoi ne puis-je pas définir un nouveau type dans ghci?

Je reçois une erreur dans ghci lorsque j'essaie de définir un nouveau type:

 Prelude> point de données = Pt Int Int
<interactive>: 1: 0: erreur d'analyse sur les données en entrée
Prelude> let point Point = Pt Int Int
<interactive>: 1: 4: erreur d'analyse sur les données en entrée 

Qu'est-ce que je fais mal?

27voto

applicative Points 5690

titaniumdecoy, Je me souviens d'avoir aidé avec ce genre de GHCi mystère quand j'ai appris que le fait souvent le point qui écrit des choses comme "laissez-carré x = x * x' à l'intérieur de la GHCi est comme la rédaction d' let a = f b avec do de la notation dans l' IO monade -- dire dans ce genre d'exemple:

palindromize :: IO ()
palindromize = do
  a <- readFile "foo.txt"
  let b = reverse a
  putStrLn (a ++ b)

De même, lorsque vous redéfinissez une expression dans le GHCi, c'est un peu comme faire ce qui suit, en do de la notation, ce qui est parfaitement légitime:

makeMess :: IO ()
makeMess = do
   a <- readFile "foo.txt"
   let b = reverse a
   putStrLn (a ++ b)
   let b = a
   putStrLn (a ++ b)

Personne n'aurait déclarer un type de données au moyen d'une telle séquence, mais le ferait-il d'ailleurs dans le module. J'ai peut-être deviné qu'il y avait une sorte d'objection théorique, mais Ne S. la remarque permet de croire qu'il n'en est pas une.

17voto

Alexey Romanov Points 39124

12voto

Amber Points 159296

ghci ne vous permet pas de définir des types à partir d'une entrée interactive. Vous devez plutôt placer votre définition de type dans un fichier et :load le fichier dans ghci.

12voto

Don Stewart Points 94361

Juste à titre de référence historique, l’ environnement interactif HBI Haskell permet d’utiliser pleinement Haskell sur la ligne de commande, y compris les types, les classes, etc. Il n'y a pas a priori, GHCi ne peut pas fonctionner de la même manière, et les utilisateurs pourraient écrire un front-end à GHC-API qui supportait cette ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X