On 22 June 2005 08:04, Serge D. Mechveliani wrote:

> Who knows, please, how to work with the program of
> 
> 
>   main = interact (\ s -> shows (read s :: Bool) "\n")
> 
> 
> in the interpreter  ghci  ?
> 
> This is on                       ghc-cvs-6-4-branch-June-15-2005
> under Debian Linux, i386-uknown.
> 
> When compiled, it works:   > ghc --make ReadBug
>                            > ./a.out
>                            > True   press Enter
>                            >        press Control-d
>                            > True
> 
> And it does not work under ghci:
> 
> --------------------------------------------------
>> ghci ReadBug.hs
> 
>  ___         ___ _
>   / _ \ /\  /\/ __(_)
>  / /_\// /_/ / /  | |      GHC Interactive, version 6.4.1, for
> Haskell 98. / /_\\/ __  / /___| |      http://www.haskell.org/ghc/
> \____/\/ /_/\____/|_|      Type :? for help.
> 
> Loading package base-1.0 ... linking ... done.
> Compiling Main             ( ReadBug.hs, interpreted )
> Ok, modules loaded: Main.
> (0.08 secs, 3210432 bytes)
> *Main> main
> True
> ^D*** Exception: Prelude.read: no parse
> *Main>
> ------------------------------------------------
> 
> 
> Is this a GHC bug?

Not really.  When stdin is in non-blocking mode, as it is by default
inside GHCi, then ^D loses its special meaning (this is standard Unix
terminal behaviour, we turn off "cooked" mode on the terminal).  In your
example, the ^D character is being sent to the program, and causing a
parse error.

You can re-enable ^D by putting stdin in LineBuffering mode, but then ^D
will also close GHCi, because GHCi is using the same stdin (it might be
possible to work around this, because ^D doesn't really "close" stdin,
but GHCi definitely got confused when I tried it).

Cheers,
        Simon
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to