
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@HotPOP.com