2010-06-27 12 views
36

me sale un error en ghci cuando trato de definir un nuevo tipo:¿Por qué no puedo definir un nuevo tipo en ghci?

Prelude> data Point = Pt Int Int 
<interactive>:1:0: parse error on input `data' 
Prelude> let data Point = Pt Int Int 
<interactive>:1:4: parse error on input `data'

¿Qué estoy haciendo mal?

+0

posible duplicado de [¿Es posible definir nuevas ADT en GHCi] (http://stackoverflow.com/questions/3849716/is-it-possible-to-define-new-adts-in-ghci) – newacct

+4

@ newacct: hice esta pregunta antes de que se le hiciera la pregunta a la que se vinculaba. – titaniumdecoy

+1

Como dice Alexey Romanov a continuación, puede hacerlo en ghc 7.4.1 en adelante. – Davorak

Respuesta

28

titaniumdecoy, recuerdo que me ayudaron con este tipo de GHCi misterio cuando supe lo señalado con frecuencia que escribir cosas como 'dejar cuadrado x = x * x' en el interior del GHCi es como escribir con let a = f bdo notación en la IO mónada - decir en este tipo de ejemplo:

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

del mismo modo, cuando redefine una expresión en el GHCi, es como hacer lo siguiente en do notación, que es perfectamente legítimo:

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

Nadie declarar un tipo de datos en medio de una secuencia tal, pero lo haría en el módulo en otro lugar. Podría haber adivinado que había algún tipo de objeción teórica, pero la observación de Don S. sugiere que no hay ninguna.

12

ghci no le permite definir tipos de entrada interactiva; en su lugar, debe poner su definición de tipo en un archivo y :load el archivo en ghci.

13

Solo como referencia histórica, el HBI Haskell interactive environment permite completar Haskell en la línea de comandos, incluidos los tipos, clases, etc. No hay a priori GHCi no puede funcionar de manera similar, y los usuarios podría escribir un front-end para GHC-API que apoyó esta ...

Cuestiones relacionadas