Bulat Ziganshin bulatz at
Tue Feb 7 15:47:17 EST 2006

Hello Ben,

Tuesday, February 07, 2006, 11:21:56 PM, you wrote:

>> {-# OPTIONS_GHC -fglasgow-exts #-}
>> main = do return "xx" >>= ((\x -> print x) :: Show a => a -> IO ())
>> main2 = do return "xx" >>= (\(x:: (forall a . (Show a) => a)) -> print x)
>> main3 = do (x :: forall a . Show a => a) <- return "xx"
>>            print x
>> in this module, only "main" compiles ok

BRG> The other two need "exists" rather than "forall", which isn't supported by 
BRG> GHC. As written, they say that x can produce a value of any type that's an 
BRG> instance of Show, but the value you're binding to x has type String, which 
BRG> can only produce a value via Show String.

that i want to say is what the first variant allows to define type of
'x' in such way that the only Show-specific operations are allowed,
like in the OOP languages when you define something like:

widget x := newLabel "text"

the second and third variant should do the same, to my mind. of
course, you are know all that intrinsics much better. i just can add
that some easier variant of declaring 'x' as having only Show
interface and mothing more will be great. and as i shown, it's only
syntax sugar and don't needs any changes in core language/type system.
i'm right?

Best regards,
 Bulat                            mailto:bulatz at

More information about the Haskell-prime mailing list