Re: Phantoms

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: Phantoms

Trevor Elliott-3
Hi Andrew,

Here's an example that might help:

> import Data.Typeable
>
> data Test a = Test Int
>
> instance Typeable a => Show (Test a) where
>   show t@(Test i) = "Test " ++ show (typeOf (ty t)) ++ " " ++ show i
>     where
>       ty :: Test a -> a,
>       ty  = undefined


and its use:

*Main> show (Test 10 :: Test Int)
"Test Int 10"
*Main> show (Test 10 :: Test String)
"Test [Char] 10"


--trevor

On Wed, 2008-08-06 at 19:09 +0100, Andrew Coppin wrote:

> I just (re)discovered that I can do things like
>
>   data Foo x = Foo Int Int
>
> Now "Foo Int" and "Foo Double" are, as far as the type checker cares,
> two completely different types, even though in fact they are the same.
> This is actually Quite Useful, in the particular case I'm working on.
>
> Here's the thing though... How do I get it so that "Foo Int" and "Foo
> Double" produce slightly different strings when printed?
>
> _______________________________________________
> Haskell-Cafe mailing list
> [hidden email]
> http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

signature.asc (204 bytes) Download Attachment