[Haskell-cafe] Show instances for error messages (Was: Refactoring status)

Emil Axelsson emax at cs.chalmers.se
Mon Jan 7 09:56:33 EST 2008


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 at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe


More information about the Haskell-Cafe mailing list