Why can’t I define a new type in ghci?

titaniumdecoy, I remember being helped with this sort of GHCi mystery when I learned the frequently made point that writing things like ‘let square x = x * x’ inside the GHCi is like writing let a = f b with do notation in the IO monad — say in this sort of example:

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

Similarly, when you redefine an expression in the GHCi, it’s sort of like doing the following in do notation, which is perfectly legitimate:

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

No one would declare a data type in the middle of such a sequence, but would do it elsewhere in the module. I might have guessed that there was some sort of theoretical objection, but Don S.’s remark suggests there isn’t one.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)