{-# LANGUAGE RankNTypes #-}
module GenericTree where

import Data.Typeable

dynRep :: (Typeable a) => a -> (TypeRep, forall b. (Typeable b) => b -> (Maybe b))
dynRep a = (typeOf a, \_ -> cast a)