The only possible definition of such a function is something like

  unsafeShow :: (forall a . Show a => a) -> String
  unsafeShow a = show (a :: Bool)

right?

And you'd also need to coerce the argument type in order to use it:

  putStrLn $ unsafeShow $ unsafeCoerce True

Right?

Then a nicer definition might be

  unsafeShow :: Show a => a -> b -> String
  unsafeShow a b = show (unsafeCoerce b `asTypeOf` a)

Here is an example of how to use it to show an overloaded variable without changing the type signature:

  test :: Eq a => a -> IO ()
  test a = putStrLn $ unsafeShow (undefined :: Int) a

Of course, this only works safely if a is an Int:

  *Main> test (5 :: Int)
  5
  *Main> test (5 :: Double)
  0



/ Emil



On 2008-01-07 12:56, Lutz Donnerhacke wrote:
* Henning Thielemann wrote:
happen. Paradoxical. It would be interesting if it is possible to tunnel
Show class dictionaries through to an 'error' like IO is tunneled to
'trace'.

unsafeShow :: (forall a . Show a => a) -> String
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to