[Haskell-cafe] understanding typeable

Dan Doel dan.doel at gmail.com
Sun Apr 12 18:07:18 EDT 2009


On Sunday 12 April 2009 3:42:35 pm Anatoly Yakovenko wrote:
> i am trying to figure out how typeable works, so i have this data type
>
> data Foo = FooC Int
>          deriving (Data, Typeable, Show)
>
> So how come this works:
> > funResultTy (typeOf ((+) 1)) (typeOf 1)
>
> Just Integer
>
> but this doesnt:
> > funResultTy (typeOf FooC) (typeOf 1)
>
> Nothing
>
> FooC is of type t -> u and 1 is of type t so the result should be u?
> I don't think t and u need to be the same since
>
> > funResultTy (typeOf (\a -> a:[1])) (typeOf 1)
>
> Just [Integer]
>
> works fine.  So given a constructor, how come i cant seem to construct
> a type out of it?

Judging from the other types, 'typeOf 1' is defaulting to Integer. FooC, per 
your declaration, has type 'Int -> Foo'. So, you're probably asking it what 
happens when you apply an Int -> Foo to an Integer, which would be a type 
error, and explains the Nothing, I think.

-- Dan


More information about the Haskell-Cafe mailing list