Java-like
Bulat Ziganshin
bulatz at HotPOP.com
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 HotPOP.com
More information about the Haskell-prime
mailing list