Could something like this work for you? Here, a ~ b and you have access to b:

case (IsListType :: IsListType [a], Proxy :: Proxy a) of
    (_, proxy :: Proxy b) -> asProxyTypeOf undefined proxy :: b

On Thu, Aug 10, 2017 at 4:16 PM, Wolfgang Jeltsch <wolfgang-it@jeltsch.info> wrote:
Hi!

GHC has some support for referring to existentially quantified type
variables. For example, consider the following definition:

> data SomeList = forall a . SomeList [a]

With the ScopedTypeVariables extension, you can get hold of the concrete
type a used in a SomeList value:

> f :: SomeList -> SomeList
> f (SomeList [x :: a]) = SomeList xs where
>
>     xs :: [a]
>     xs = [x, x]

However, this approach does not work if there are no fields whose type
involves the existentially quantified type variable. Consider, for
example, the following definition:

> data IsListType a where
>
>     IsListType :: IsListType [b]

For each type T, we can match a value of type IsListType T against the
pattern IsListType. If this succeeds, we know that T is a list type, but
we do not have access to the respective element type.

Is there a way to determine existentially quantified type variables like
the b in the above example?

All the best,
Wolfgang
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.