[Haskell-cafe] reifying based-on type of a newtype or data
anthony_clayden at clear.net.nz
Tue Oct 29 04:07:49 UTC 2013
> John Lato <jwlato <at> gmail.com> writes:
> What about Data.Typeable.typeRepArgs ?
> typeRepArgs :: TypeRep -> [TypeRep]
> Prelude Data.Data> typeRepArgs (typeOf Foo)[Int,Foo]
Thanks John, I did look at that,
and thought it returned only type args,
not the 'baked in' type.
Your example applies to `(typeOf Foo)` -- that is, the data constr,
which is indeed a function.
And `typeOf Foo` is `Int -> Foo`, as I noted in the OP.
I want something that can apply to a value of type Foo.
(`someFoo`, in my example.)
> For anything more complicated, I suspect you'll need
> Data/Generic/Template Haskell.
That is rather what I feared.
I want to avoid TH, because that imposes on my user.
Could you point to where/what in Data/Generics?
> > newtype Foo = Foo Int deriving (Read, Show, Typeable, Data, ...)
> > someFoo = Foo 7
> > I can ask for `typeOf someFoo` and get `Foo` OK.
> > I can ask for `typeOf Foo` and get `Int -> Foo` OK.
> > If I ask for `typeOf (typeOf someFoo)` I get `TypeRep`.
> > `typeOf (show $ typeOf someFoo`) gets me `[Char]` (aka `String`)
> > What I want is to get the based-on type baked inside `someFoo`
More information about the Haskell-Cafe