[Haskell-cafe] understanding typeable
David Menendez
dave at zednenem.com
Mon Apr 13 01:54:39 EDT 2009
On Mon, Apr 13, 2009 at 1:37 AM, Anatoly Yakovenko
<aeyakovenko at gmail.com> wrote:
> any idea why this is True
>
> data Foo = FooC Int
> | BarC Int
> deriving (Data, Typeable, Show)
>
>> fromJust $ funResultTy (typeOf FooC) (typeOf (1::Int))
> Loading package syb ... linking ... done.
> ParseG.Foo
>> typeRepTyCon $ fromJust $ funResultTy (typeOf FooC) (typeOf (1::Int))
> ParseG.Foo
>> let a = typeRepTyCon $ fromJust $ funResultTy (typeOf FooC) (typeOf (1::Int))
>> :t a
> a :: TyCon
>> typeRepTyCon $ typeOf $ BarC 2
> ParseG.Foo
>> let b = typeRepTyCon $ typeOf $ BarC 2
>> a == b
> True
They're both representing Foo.
> I thought that TyCon can distinguish constructors. it seems no
> different then a typerep
TyCon distinguishes *type* constructors, like [] and Maybe and (->).
FooC and BarC are *data* constructors. Typeable can't distinguish them
directly. You either need to cast to Foo and then pattern-match, or
use Data.
--
Dave Menendez <dave at zednenem.com>
<http://www.eyrie.org/~zednenem/>
More information about the Haskell-Cafe
mailing list