[Haskell-cafe] Newbie question about using WinGHCi

Ivan Miljenovic ivan.miljenovic at gmail.com
Thu Jul 1 02:12:18 EDT 2010


On 1 July 2010 16:04, Christopher Tauss <ctauss1 at gmail.com> wrote:
> Hello -
>
> I just a day or so ago downloaded Hakell and am playing around with it, and
> I came upon this problem with WinGHCi:
>
> I am able to enter a multi-line "do" statement that works if I use brackets
> and semi-colon like so:
>
> Prelude> :{
> Prelude| let main2 = do {
> Prelude| putStrLn "Please enter your name: ";
> Prelude| name <- getLine;
> Prelude| putStrLn ("Hello, " ++ name ++ ", how are you?") }
> Prelude| :}
> Prelude> main2
> Please enter your name:
> CT
> Hello, CT, how are you?
> Prelude>
>
> Note there is no indentation.  This makes sense to me because the :{  :}
> just take all the lines in between and make it one line.
>
> But it seems to me to be IMPOSSIBLE to input this into WinGHCi using
> indentation like most of the code samples seem to do.
>
> Should I just be satisfied that it works using brackets/ semi-colons?  Or is
> there something obvious that I am missing that allows for indentation?

Typically, ghci (including WinGHCI) and Hugs are used to evaluate and
experiment with code, rather than writing it.  Write your actual code
in a file and load it with :load (or :l for short) into ghci.

In this sense, they aren't "real" REPLs in that you can't define new
data types, classes, etc. in them (you can write functions with a let
statement, but it gets cumbersome for long functions).

It might be better off thinking of the prompt as being individual
lines in a big do-block for a specialised version of the IO monad (in
the sense that normally just entering "5+4" wouldn't typecheck let
alone print the result, etc.).

> Thanks in advance. It's issues lik this that keep me up into the depths of
> night.

Hopefully you can now get to sleep ;-)

-- 
Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com
IvanMiljenovic.wordpress.com


More information about the Haskell-Cafe mailing list