[Haskell-cafe] How can I stop GHCi from calling "show" for IO actions?

Sam Hughes hughes at rpi.edu
Sat Sep 15 23:53:16 EDT 2007


Ryan Ingram wrote:
> Prelude> let inf = repeat 1
> Prelude> inf
> [1,1,(lots of output until I press ctrl-c),Interrupted.
> (I expect this to happen)
> Prelude> let x = inf
> (no output here!)
> Prelude> :t x
> x :: [Integer]
> Prelude> return inf
> [1,1,(lots of output until I press ctrl-c),Interrupted.
> (I also expect this to happen)
> Prelude> y <- return inf
> [1,1,(lots of output until I press ctrl-c),Interrupted.
> (I do not expect this to happen here!)
> Prelude> :t y
> 
> <interactive>:1:0: Not in scope: 'y'
> 
> Is this a bug?  Why does "y <- return exp" have different behavior
> than "let y = exp"?  Is there a way to make GHCi not print the result
> of an action but still make my variables get bound?

That's weird.

Prelude> (x,y) <- return $ (repeat 1, repeat 2)
Prelude> Just x <- return $ Just (repeat 1)
[1,1,1,...
Prelude> (x,_) <- return $ (repeat 1, repeat 2)
[1,1,1,...
Prelude> Just (x,y) <- return $ Just (repeat 1, repeat 2)
Prelude>

It seems that GHCi outputs the contents of the variable you've created 
when there's only one of them.

- Sam


More information about the Haskell-Cafe mailing list