packages feed

HROOT 0.6.2 → 0.6.3

raw patch · 3 files changed

+2890/−2 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- HROOT.AddOn: castTObject :: Exist TObject -> IO (EGADTType TObject)
- HROOT.AddOn: class GADTTypeable a where { data family GADTType a :: * -> *; data family EGADTType a :: *; }
- HROOT.AddOn: data BottomType
- HROOT.AddOn: instance GADTTypeable TObject
+ HROOT.Class.Existential: castTApplication :: Exist TApplication -> IO (EGADTType TApplication)
+ HROOT.Class.Existential: castTArc :: Exist TArc -> IO (EGADTType TArc)
+ HROOT.Class.Existential: castTArrow :: Exist TArrow -> IO (EGADTType TArrow)
+ HROOT.Class.Existential: castTAttParticle :: Exist TAttParticle -> IO (EGADTType TAttParticle)
+ HROOT.Class.Existential: castTAxis :: Exist TAxis -> IO (EGADTType TAxis)
+ HROOT.Class.Existential: castTBRIK :: Exist TBRIK -> IO (EGADTType TBRIK)
+ HROOT.Class.Existential: castTBox :: Exist TBox -> IO (EGADTType TBox)
+ HROOT.Class.Existential: castTBranch :: Exist TBranch -> IO (EGADTType TBranch)
+ HROOT.Class.Existential: castTButton :: Exist TButton -> IO (EGADTType TButton)
+ HROOT.Class.Existential: castTCanvas :: Exist TCanvas -> IO (EGADTType TCanvas)
+ HROOT.Class.Existential: castTChain :: Exist TChain -> IO (EGADTType TChain)
+ HROOT.Class.Existential: castTClass :: Exist TClass -> IO (EGADTType TClass)
+ HROOT.Class.Existential: castTCrown :: Exist TCrown -> IO (EGADTType TCrown)
+ HROOT.Class.Existential: castTCurlyArc :: Exist TCurlyArc -> IO (EGADTType TCurlyArc)
+ HROOT.Class.Existential: castTCurlyLine :: Exist TCurlyLine -> IO (EGADTType TCurlyLine)
+ HROOT.Class.Existential: castTCutG :: Exist TCutG -> IO (EGADTType TCutG)
+ HROOT.Class.Existential: castTDialogCanvas :: Exist TDialogCanvas -> IO (EGADTType TDialogCanvas)
+ HROOT.Class.Existential: castTDiamond :: Exist TDiamond -> IO (EGADTType TDiamond)
+ HROOT.Class.Existential: castTDirectory :: Exist TDirectory -> IO (EGADTType TDirectory)
+ HROOT.Class.Existential: castTDirectoryFile :: Exist TDirectoryFile -> IO (EGADTType TDirectoryFile)
+ HROOT.Class.Existential: castTEfficiency :: Exist TEfficiency -> IO (EGADTType TEfficiency)
+ HROOT.Class.Existential: castTEllipse :: Exist TEllipse -> IO (EGADTType TEllipse)
+ HROOT.Class.Existential: castTEvePad :: Exist TEvePad -> IO (EGADTType TEvePad)
+ HROOT.Class.Existential: castTF1 :: Exist TF1 -> IO (EGADTType TF1)
+ HROOT.Class.Existential: castTFile :: Exist TFile -> IO (EGADTType TFile)
+ HROOT.Class.Existential: castTFormula :: Exist TFormula -> IO (EGADTType TFormula)
+ HROOT.Class.Existential: castTFrame :: Exist TFrame -> IO (EGADTType TFrame)
+ HROOT.Class.Existential: castTGaxis :: Exist TGaxis -> IO (EGADTType TGaxis)
+ HROOT.Class.Existential: castTGraph :: Exist TGraph -> IO (EGADTType TGraph)
+ HROOT.Class.Existential: castTGraphAsymmErrors :: Exist TGraphAsymmErrors -> IO (EGADTType TGraphAsymmErrors)
+ HROOT.Class.Existential: castTGraphBentErrors :: Exist TGraphBentErrors -> IO (EGADTType TGraphBentErrors)
+ HROOT.Class.Existential: castTGraphErrors :: Exist TGraphErrors -> IO (EGADTType TGraphErrors)
+ HROOT.Class.Existential: castTGraphPolar :: Exist TGraphPolar -> IO (EGADTType TGraphPolar)
+ HROOT.Class.Existential: castTGraphQQ :: Exist TGraphQQ -> IO (EGADTType TGraphQQ)
+ HROOT.Class.Existential: castTGroupButton :: Exist TGroupButton -> IO (EGADTType TGroupButton)
+ HROOT.Class.Existential: castTH1 :: Exist TH1 -> IO (EGADTType TH1)
+ HROOT.Class.Existential: castTH1C :: Exist TH1C -> IO (EGADTType TH1C)
+ HROOT.Class.Existential: castTH1D :: Exist TH1D -> IO (EGADTType TH1D)
+ HROOT.Class.Existential: castTH1F :: Exist TH1F -> IO (EGADTType TH1F)
+ HROOT.Class.Existential: castTH1I :: Exist TH1I -> IO (EGADTType TH1I)
+ HROOT.Class.Existential: castTH1S :: Exist TH1S -> IO (EGADTType TH1S)
+ HROOT.Class.Existential: castTH2 :: Exist TH2 -> IO (EGADTType TH2)
+ HROOT.Class.Existential: castTH2C :: Exist TH2C -> IO (EGADTType TH2C)
+ HROOT.Class.Existential: castTH2D :: Exist TH2D -> IO (EGADTType TH2D)
+ HROOT.Class.Existential: castTH2F :: Exist TH2F -> IO (EGADTType TH2F)
+ HROOT.Class.Existential: castTH2I :: Exist TH2I -> IO (EGADTType TH2I)
+ HROOT.Class.Existential: castTH2Poly :: Exist TH2Poly -> IO (EGADTType TH2Poly)
+ HROOT.Class.Existential: castTH2S :: Exist TH2S -> IO (EGADTType TH2S)
+ HROOT.Class.Existential: castTH3 :: Exist TH3 -> IO (EGADTType TH3)
+ HROOT.Class.Existential: castTH3C :: Exist TH3C -> IO (EGADTType TH3C)
+ HROOT.Class.Existential: castTH3D :: Exist TH3D -> IO (EGADTType TH3D)
+ HROOT.Class.Existential: castTH3F :: Exist TH3F -> IO (EGADTType TH3F)
+ HROOT.Class.Existential: castTH3I :: Exist TH3I -> IO (EGADTType TH3I)
+ HROOT.Class.Existential: castTH3S :: Exist TH3S -> IO (EGADTType TH3S)
+ HROOT.Class.Existential: castTHStack :: Exist THStack -> IO (EGADTType THStack)
+ HROOT.Class.Existential: castTInspectCanvas :: Exist TInspectCanvas -> IO (EGADTType TInspectCanvas)
+ HROOT.Class.Existential: castTLatex :: Exist TLatex -> IO (EGADTType TLatex)
+ HROOT.Class.Existential: castTLegend :: Exist TLegend -> IO (EGADTType TLegend)
+ HROOT.Class.Existential: castTLine :: Exist TLine -> IO (EGADTType TLine)
+ HROOT.Class.Existential: castTNamed :: Exist TNamed -> IO (EGADTType TNamed)
+ HROOT.Class.Existential: castTNtuple :: Exist TNtuple -> IO (EGADTType TNtuple)
+ HROOT.Class.Existential: castTNtupleD :: Exist TNtupleD -> IO (EGADTType TNtupleD)
+ HROOT.Class.Existential: castTObject :: Exist TObject -> IO (EGADTType TObject)
+ HROOT.Class.Existential: castTPCON :: Exist TPCON -> IO (EGADTType TPCON)
+ HROOT.Class.Existential: castTPad :: Exist TPad -> IO (EGADTType TPad)
+ HROOT.Class.Existential: castTPave :: Exist TPave -> IO (EGADTType TPave)
+ HROOT.Class.Existential: castTPaveClass :: Exist TPaveClass -> IO (EGADTType TPaveClass)
+ HROOT.Class.Existential: castTPaveLabel :: Exist TPaveLabel -> IO (EGADTType TPaveLabel)
+ HROOT.Class.Existential: castTPaveStats :: Exist TPaveStats -> IO (EGADTType TPaveStats)
+ HROOT.Class.Existential: castTPaveText :: Exist TPaveText -> IO (EGADTType TPaveText)
+ HROOT.Class.Existential: castTPavesText :: Exist TPavesText -> IO (EGADTType TPavesText)
+ HROOT.Class.Existential: castTPolyLine :: Exist TPolyLine -> IO (EGADTType TPolyLine)
+ HROOT.Class.Existential: castTRandom :: Exist TRandom -> IO (EGADTType TRandom)
+ HROOT.Class.Existential: castTRint :: Exist TRint -> IO (EGADTType TRint)
+ HROOT.Class.Existential: castTSPHE :: Exist TSPHE -> IO (EGADTType TSPHE)
+ HROOT.Class.Existential: castTShape :: Exist TShape -> IO (EGADTType TShape)
+ HROOT.Class.Existential: castTSlider :: Exist TSlider -> IO (EGADTType TSlider)
+ HROOT.Class.Existential: castTSliderBox :: Exist TSliderBox -> IO (EGADTType TSliderBox)
+ HROOT.Class.Existential: castTTUBE :: Exist TTUBE -> IO (EGADTType TTUBE)
+ HROOT.Class.Existential: castTText :: Exist TText -> IO (EGADTType TText)
+ HROOT.Class.Existential: castTTree :: Exist TTree -> IO (EGADTType TTree)
+ HROOT.Class.Existential: castTTreePlayer :: Exist TTreePlayer -> IO (EGADTType TTreePlayer)
+ HROOT.Class.Existential: castTTreeSQL :: Exist TTreeSQL -> IO (EGADTType TTreeSQL)
+ HROOT.Class.Existential: castTVirtualPad :: Exist TVirtualPad -> IO (EGADTType TVirtualPad)
+ HROOT.Class.Existential: castTVirtualTreePlayer :: Exist TVirtualTreePlayer -> IO (EGADTType TVirtualTreePlayer)
+ HROOT.Class.Existential: castTWbox :: Exist TWbox -> IO (EGADTType TWbox)
+ HROOT.Class.Existential: castTXTRU :: Exist TXTRU -> IO (EGADTType TXTRU)
+ HROOT.Class.Existential: class GADTTypeable a where { data family GADTType a :: * -> *; data family EGADTType a :: *; }
+ HROOT.Class.Existential: data BottomType
+ HROOT.Class.Existential: instance GADTTypeable TApplication
+ HROOT.Class.Existential: instance GADTTypeable TArc
+ HROOT.Class.Existential: instance GADTTypeable TArrow
+ HROOT.Class.Existential: instance GADTTypeable TAttParticle
+ HROOT.Class.Existential: instance GADTTypeable TAxis
+ HROOT.Class.Existential: instance GADTTypeable TBRIK
+ HROOT.Class.Existential: instance GADTTypeable TBox
+ HROOT.Class.Existential: instance GADTTypeable TBranch
+ HROOT.Class.Existential: instance GADTTypeable TButton
+ HROOT.Class.Existential: instance GADTTypeable TCanvas
+ HROOT.Class.Existential: instance GADTTypeable TChain
+ HROOT.Class.Existential: instance GADTTypeable TClass
+ HROOT.Class.Existential: instance GADTTypeable TCrown
+ HROOT.Class.Existential: instance GADTTypeable TCurlyArc
+ HROOT.Class.Existential: instance GADTTypeable TCurlyLine
+ HROOT.Class.Existential: instance GADTTypeable TCutG
+ HROOT.Class.Existential: instance GADTTypeable TDialogCanvas
+ HROOT.Class.Existential: instance GADTTypeable TDiamond
+ HROOT.Class.Existential: instance GADTTypeable TDirectory
+ HROOT.Class.Existential: instance GADTTypeable TDirectoryFile
+ HROOT.Class.Existential: instance GADTTypeable TEfficiency
+ HROOT.Class.Existential: instance GADTTypeable TEllipse
+ HROOT.Class.Existential: instance GADTTypeable TEvePad
+ HROOT.Class.Existential: instance GADTTypeable TF1
+ HROOT.Class.Existential: instance GADTTypeable TFile
+ HROOT.Class.Existential: instance GADTTypeable TFormula
+ HROOT.Class.Existential: instance GADTTypeable TFrame
+ HROOT.Class.Existential: instance GADTTypeable TGaxis
+ HROOT.Class.Existential: instance GADTTypeable TGraph
+ HROOT.Class.Existential: instance GADTTypeable TGraphAsymmErrors
+ HROOT.Class.Existential: instance GADTTypeable TGraphBentErrors
+ HROOT.Class.Existential: instance GADTTypeable TGraphErrors
+ HROOT.Class.Existential: instance GADTTypeable TGraphPolar
+ HROOT.Class.Existential: instance GADTTypeable TGraphQQ
+ HROOT.Class.Existential: instance GADTTypeable TGroupButton
+ HROOT.Class.Existential: instance GADTTypeable TH1
+ HROOT.Class.Existential: instance GADTTypeable TH1C
+ HROOT.Class.Existential: instance GADTTypeable TH1D
+ HROOT.Class.Existential: instance GADTTypeable TH1F
+ HROOT.Class.Existential: instance GADTTypeable TH1I
+ HROOT.Class.Existential: instance GADTTypeable TH1S
+ HROOT.Class.Existential: instance GADTTypeable TH2
+ HROOT.Class.Existential: instance GADTTypeable TH2C
+ HROOT.Class.Existential: instance GADTTypeable TH2D
+ HROOT.Class.Existential: instance GADTTypeable TH2F
+ HROOT.Class.Existential: instance GADTTypeable TH2I
+ HROOT.Class.Existential: instance GADTTypeable TH2Poly
+ HROOT.Class.Existential: instance GADTTypeable TH2S
+ HROOT.Class.Existential: instance GADTTypeable TH3
+ HROOT.Class.Existential: instance GADTTypeable TH3C
+ HROOT.Class.Existential: instance GADTTypeable TH3D
+ HROOT.Class.Existential: instance GADTTypeable TH3F
+ HROOT.Class.Existential: instance GADTTypeable TH3I
+ HROOT.Class.Existential: instance GADTTypeable TH3S
+ HROOT.Class.Existential: instance GADTTypeable THStack
+ HROOT.Class.Existential: instance GADTTypeable TInspectCanvas
+ HROOT.Class.Existential: instance GADTTypeable TLatex
+ HROOT.Class.Existential: instance GADTTypeable TLegend
+ HROOT.Class.Existential: instance GADTTypeable TLine
+ HROOT.Class.Existential: instance GADTTypeable TNamed
+ HROOT.Class.Existential: instance GADTTypeable TNtuple
+ HROOT.Class.Existential: instance GADTTypeable TNtupleD
+ HROOT.Class.Existential: instance GADTTypeable TObject
+ HROOT.Class.Existential: instance GADTTypeable TPCON
+ HROOT.Class.Existential: instance GADTTypeable TPad
+ HROOT.Class.Existential: instance GADTTypeable TPave
+ HROOT.Class.Existential: instance GADTTypeable TPaveClass
+ HROOT.Class.Existential: instance GADTTypeable TPaveLabel
+ HROOT.Class.Existential: instance GADTTypeable TPaveStats
+ HROOT.Class.Existential: instance GADTTypeable TPaveText
+ HROOT.Class.Existential: instance GADTTypeable TPavesText
+ HROOT.Class.Existential: instance GADTTypeable TPolyLine
+ HROOT.Class.Existential: instance GADTTypeable TRandom
+ HROOT.Class.Existential: instance GADTTypeable TRint
+ HROOT.Class.Existential: instance GADTTypeable TSPHE
+ HROOT.Class.Existential: instance GADTTypeable TShape
+ HROOT.Class.Existential: instance GADTTypeable TSlider
+ HROOT.Class.Existential: instance GADTTypeable TSliderBox
+ HROOT.Class.Existential: instance GADTTypeable TTUBE
+ HROOT.Class.Existential: instance GADTTypeable TText
+ HROOT.Class.Existential: instance GADTTypeable TTree
+ HROOT.Class.Existential: instance GADTTypeable TTreePlayer
+ HROOT.Class.Existential: instance GADTTypeable TTreeSQL
+ HROOT.Class.Existential: instance GADTTypeable TVirtualPad
+ HROOT.Class.Existential: instance GADTTypeable TVirtualTreePlayer
+ HROOT.Class.Existential: instance GADTTypeable TWbox
+ HROOT.Class.Existential: instance GADTTypeable TXTRU

Files

HROOT.cabal view
@@ -1,5 +1,5 @@ Name:		HROOT-Version:	0.6.2+Version:	0.6.3 Synopsis:	Wrapper for ROOT Description: 	Haskell FFI binding for ROOT   Homepage:       http://ianwookim.org/HROOT@@ -35,6 +35,7 @@                        HROOT.Class.Interface                        HROOT.Class.Implementation                        HROOT.Class.FFI+                       HROOT.Class.Existential                        HROOT.AddOn                        HROOT.AddOnFunction                        HROOT.Class.TObject
src/HROOT/AddOn.hs view
@@ -2,6 +2,7 @@  module HROOT.AddOn where +{- --import Foreign.C             import Foreign.ForeignPtr --import Foreign.Marshal.Array@@ -38,5 +39,5 @@                         in  return . EGADTTObject . GADTTObjectTH1F $ obj'     _         -> return . EGADTTObject $ GADTTObjectBottom -+-} 
+ src/HROOT/Class/Existential.hs view
@@ -0,0 +1,2886 @@+{-# LANGUAGE TypeFamilies, GADTs, ExistentialQuantification, EmptyDataDecls #-}++module HROOT.Class.Existential where++--import Foreign.C            +import Foreign.ForeignPtr+--import Foreign.Marshal.Array+++import HROOT.Class.Interface+import HROOT.Class.Implementation ()++data BottomType++class GADTTypeable a where+  data GADTType a :: * -> *+  data EGADTType a :: *++instance GADTTypeable TRandom where+  data GADTType TRandom a where +    GADTTRandomTRandom :: TRandom -> GADTType TRandom TRandom+    GADTTRandomBottom  :: GADTType TRandom BottomType+  data EGADTType TRandom = forall a. EGADTTRandom (GADTType TRandom a)++castTRandom :: Exist TRandom -> IO (EGADTType TRandom)+castTRandom eobj = do +  let obj = TRandom (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TRandom" -> case obj of+        TRandom fptr -> let obj' = TRandom (castForeignPtr fptr :: ForeignPtr RawTRandom)+                        in  return . EGADTTRandom . GADTTRandomTRandom $ obj'+    _         -> return . EGADTTRandom $ GADTTRandomBottom++++++instance GADTTypeable TRint where+  data GADTType TRint a where +    GADTTRintTRint :: TRint -> GADTType TRint TRint+    GADTTRintBottom  :: GADTType TRint BottomType+  data EGADTType TRint = forall a. EGADTTRint (GADTType TRint a)++castTRint :: Exist TRint -> IO (EGADTType TRint)+castTRint eobj = do +  let obj = TRint (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TRint" -> case obj of+        TRint fptr -> let obj' = TRint (castForeignPtr fptr :: ForeignPtr RawTRint)+                        in  return . EGADTTRint . GADTTRintTRint $ obj'+    _         -> return . EGADTTRint $ GADTTRintBottom++++++instance GADTTypeable TApplication where+  data GADTType TApplication a where +    GADTTApplicationTApplication :: TApplication -> GADTType TApplication TApplication+    GADTTApplicationTRint :: TRint -> GADTType TApplication TRint+    GADTTApplicationBottom  :: GADTType TApplication BottomType+  data EGADTType TApplication = forall a. EGADTTApplication (GADTType TApplication a)++castTApplication :: Exist TApplication -> IO (EGADTType TApplication)+castTApplication eobj = do +  let obj = TApplication (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TApplication" -> case obj of+        TApplication fptr -> let obj' = TApplication (castForeignPtr fptr :: ForeignPtr RawTApplication)+                        in  return . EGADTTApplication . GADTTApplicationTApplication $ obj'+    "TRint" -> case obj of+        TApplication fptr -> let obj' = TRint (castForeignPtr fptr :: ForeignPtr RawTRint)+                        in  return . EGADTTApplication . GADTTApplicationTRint $ obj'+    _         -> return . EGADTTApplication $ GADTTApplicationBottom++++++instance GADTTypeable TSlider where+  data GADTType TSlider a where +    GADTTSliderTSlider :: TSlider -> GADTType TSlider TSlider+    GADTTSliderBottom  :: GADTType TSlider BottomType+  data EGADTType TSlider = forall a. EGADTTSlider (GADTType TSlider a)++castTSlider :: Exist TSlider -> IO (EGADTType TSlider)+castTSlider eobj = do +  let obj = TSlider (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TSlider" -> case obj of+        TSlider fptr -> let obj' = TSlider (castForeignPtr fptr :: ForeignPtr RawTSlider)+                        in  return . EGADTTSlider . GADTTSliderTSlider $ obj'+    _         -> return . EGADTTSlider $ GADTTSliderBottom++++++instance GADTTypeable TEvePad where+  data GADTType TEvePad a where +    GADTTEvePadTEvePad :: TEvePad -> GADTType TEvePad TEvePad+    GADTTEvePadBottom  :: GADTType TEvePad BottomType+  data EGADTType TEvePad = forall a. EGADTTEvePad (GADTType TEvePad a)++castTEvePad :: Exist TEvePad -> IO (EGADTType TEvePad)+castTEvePad eobj = do +  let obj = TEvePad (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TEvePad" -> case obj of+        TEvePad fptr -> let obj' = TEvePad (castForeignPtr fptr :: ForeignPtr RawTEvePad)+                        in  return . EGADTTEvePad . GADTTEvePadTEvePad $ obj'+    _         -> return . EGADTTEvePad $ GADTTEvePadBottom++++++instance GADTTypeable TInspectCanvas where+  data GADTType TInspectCanvas a where +    GADTTInspectCanvasTInspectCanvas :: TInspectCanvas -> GADTType TInspectCanvas TInspectCanvas+    GADTTInspectCanvasBottom  :: GADTType TInspectCanvas BottomType+  data EGADTType TInspectCanvas = forall a. EGADTTInspectCanvas (GADTType TInspectCanvas a)++castTInspectCanvas :: Exist TInspectCanvas -> IO (EGADTType TInspectCanvas)+castTInspectCanvas eobj = do +  let obj = TInspectCanvas (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TInspectCanvas" -> case obj of+        TInspectCanvas fptr -> let obj' = TInspectCanvas (castForeignPtr fptr :: ForeignPtr RawTInspectCanvas)+                        in  return . EGADTTInspectCanvas . GADTTInspectCanvasTInspectCanvas $ obj'+    _         -> return . EGADTTInspectCanvas $ GADTTInspectCanvasBottom++++++instance GADTTypeable TDialogCanvas where+  data GADTType TDialogCanvas a where +    GADTTDialogCanvasTDialogCanvas :: TDialogCanvas -> GADTType TDialogCanvas TDialogCanvas+    GADTTDialogCanvasBottom  :: GADTType TDialogCanvas BottomType+  data EGADTType TDialogCanvas = forall a. EGADTTDialogCanvas (GADTType TDialogCanvas a)++castTDialogCanvas :: Exist TDialogCanvas -> IO (EGADTType TDialogCanvas)+castTDialogCanvas eobj = do +  let obj = TDialogCanvas (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TDialogCanvas" -> case obj of+        TDialogCanvas fptr -> let obj' = TDialogCanvas (castForeignPtr fptr :: ForeignPtr RawTDialogCanvas)+                        in  return . EGADTTDialogCanvas . GADTTDialogCanvasTDialogCanvas $ obj'+    _         -> return . EGADTTDialogCanvas $ GADTTDialogCanvasBottom++++++instance GADTTypeable TCanvas where+  data GADTType TCanvas a where +    GADTTCanvasTCanvas :: TCanvas -> GADTType TCanvas TCanvas+    GADTTCanvasTDialogCanvas :: TDialogCanvas -> GADTType TCanvas TDialogCanvas+    GADTTCanvasTInspectCanvas :: TInspectCanvas -> GADTType TCanvas TInspectCanvas+    GADTTCanvasBottom  :: GADTType TCanvas BottomType+  data EGADTType TCanvas = forall a. EGADTTCanvas (GADTType TCanvas a)++castTCanvas :: Exist TCanvas -> IO (EGADTType TCanvas)+castTCanvas eobj = do +  let obj = TCanvas (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TCanvas" -> case obj of+        TCanvas fptr -> let obj' = TCanvas (castForeignPtr fptr :: ForeignPtr RawTCanvas)+                        in  return . EGADTTCanvas . GADTTCanvasTCanvas $ obj'+    "TDialogCanvas" -> case obj of+        TCanvas fptr -> let obj' = TDialogCanvas (castForeignPtr fptr :: ForeignPtr RawTDialogCanvas)+                        in  return . EGADTTCanvas . GADTTCanvasTDialogCanvas $ obj'+    "TInspectCanvas" -> case obj of+        TCanvas fptr -> let obj' = TInspectCanvas (castForeignPtr fptr :: ForeignPtr RawTInspectCanvas)+                        in  return . EGADTTCanvas . GADTTCanvasTInspectCanvas $ obj'+    _         -> return . EGADTTCanvas $ GADTTCanvasBottom++++++instance GADTTypeable TGroupButton where+  data GADTType TGroupButton a where +    GADTTGroupButtonTGroupButton :: TGroupButton -> GADTType TGroupButton TGroupButton+    GADTTGroupButtonBottom  :: GADTType TGroupButton BottomType+  data EGADTType TGroupButton = forall a. EGADTTGroupButton (GADTType TGroupButton a)++castTGroupButton :: Exist TGroupButton -> IO (EGADTType TGroupButton)+castTGroupButton eobj = do +  let obj = TGroupButton (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TGroupButton" -> case obj of+        TGroupButton fptr -> let obj' = TGroupButton (castForeignPtr fptr :: ForeignPtr RawTGroupButton)+                        in  return . EGADTTGroupButton . GADTTGroupButtonTGroupButton $ obj'+    _         -> return . EGADTTGroupButton $ GADTTGroupButtonBottom++++++instance GADTTypeable TButton where+  data GADTType TButton a where +    GADTTButtonTButton :: TButton -> GADTType TButton TButton+    GADTTButtonTGroupButton :: TGroupButton -> GADTType TButton TGroupButton+    GADTTButtonBottom  :: GADTType TButton BottomType+  data EGADTType TButton = forall a. EGADTTButton (GADTType TButton a)++castTButton :: Exist TButton -> IO (EGADTType TButton)+castTButton eobj = do +  let obj = TButton (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TButton" -> case obj of+        TButton fptr -> let obj' = TButton (castForeignPtr fptr :: ForeignPtr RawTButton)+                        in  return . EGADTTButton . GADTTButtonTButton $ obj'+    "TGroupButton" -> case obj of+        TButton fptr -> let obj' = TGroupButton (castForeignPtr fptr :: ForeignPtr RawTGroupButton)+                        in  return . EGADTTButton . GADTTButtonTGroupButton $ obj'+    _         -> return . EGADTTButton $ GADTTButtonBottom++++++instance GADTTypeable TPad where+  data GADTType TPad a where +    GADTTPadTPad :: TPad -> GADTType TPad TPad+    GADTTPadTButton :: TButton -> GADTType TPad TButton+    GADTTPadTGroupButton :: TGroupButton -> GADTType TPad TGroupButton+    GADTTPadTCanvas :: TCanvas -> GADTType TPad TCanvas+    GADTTPadTDialogCanvas :: TDialogCanvas -> GADTType TPad TDialogCanvas+    GADTTPadTInspectCanvas :: TInspectCanvas -> GADTType TPad TInspectCanvas+    GADTTPadTEvePad :: TEvePad -> GADTType TPad TEvePad+    GADTTPadTSlider :: TSlider -> GADTType TPad TSlider+    GADTTPadBottom  :: GADTType TPad BottomType+  data EGADTType TPad = forall a. EGADTTPad (GADTType TPad a)++castTPad :: Exist TPad -> IO (EGADTType TPad)+castTPad eobj = do +  let obj = TPad (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TPad" -> case obj of+        TPad fptr -> let obj' = TPad (castForeignPtr fptr :: ForeignPtr RawTPad)+                        in  return . EGADTTPad . GADTTPadTPad $ obj'+    "TButton" -> case obj of+        TPad fptr -> let obj' = TButton (castForeignPtr fptr :: ForeignPtr RawTButton)+                        in  return . EGADTTPad . GADTTPadTButton $ obj'+    "TGroupButton" -> case obj of+        TPad fptr -> let obj' = TGroupButton (castForeignPtr fptr :: ForeignPtr RawTGroupButton)+                        in  return . EGADTTPad . GADTTPadTGroupButton $ obj'+    "TCanvas" -> case obj of+        TPad fptr -> let obj' = TCanvas (castForeignPtr fptr :: ForeignPtr RawTCanvas)+                        in  return . EGADTTPad . GADTTPadTCanvas $ obj'+    "TDialogCanvas" -> case obj of+        TPad fptr -> let obj' = TDialogCanvas (castForeignPtr fptr :: ForeignPtr RawTDialogCanvas)+                        in  return . EGADTTPad . GADTTPadTDialogCanvas $ obj'+    "TInspectCanvas" -> case obj of+        TPad fptr -> let obj' = TInspectCanvas (castForeignPtr fptr :: ForeignPtr RawTInspectCanvas)+                        in  return . EGADTTPad . GADTTPadTInspectCanvas $ obj'+    "TEvePad" -> case obj of+        TPad fptr -> let obj' = TEvePad (castForeignPtr fptr :: ForeignPtr RawTEvePad)+                        in  return . EGADTTPad . GADTTPadTEvePad $ obj'+    "TSlider" -> case obj of+        TPad fptr -> let obj' = TSlider (castForeignPtr fptr :: ForeignPtr RawTSlider)+                        in  return . EGADTTPad . GADTTPadTSlider $ obj'+    _         -> return . EGADTTPad $ GADTTPadBottom++++++instance GADTTypeable TVirtualPad where+  data GADTType TVirtualPad a where +    GADTTVirtualPadTVirtualPad :: TVirtualPad -> GADTType TVirtualPad TVirtualPad+    GADTTVirtualPadTPad :: TPad -> GADTType TVirtualPad TPad+    GADTTVirtualPadTButton :: TButton -> GADTType TVirtualPad TButton+    GADTTVirtualPadTGroupButton :: TGroupButton -> GADTType TVirtualPad TGroupButton+    GADTTVirtualPadTCanvas :: TCanvas -> GADTType TVirtualPad TCanvas+    GADTTVirtualPadTDialogCanvas :: TDialogCanvas -> GADTType TVirtualPad TDialogCanvas+    GADTTVirtualPadTInspectCanvas :: TInspectCanvas -> GADTType TVirtualPad TInspectCanvas+    GADTTVirtualPadTEvePad :: TEvePad -> GADTType TVirtualPad TEvePad+    GADTTVirtualPadTSlider :: TSlider -> GADTType TVirtualPad TSlider+    GADTTVirtualPadBottom  :: GADTType TVirtualPad BottomType+  data EGADTType TVirtualPad = forall a. EGADTTVirtualPad (GADTType TVirtualPad a)++castTVirtualPad :: Exist TVirtualPad -> IO (EGADTType TVirtualPad)+castTVirtualPad eobj = do +  let obj = TVirtualPad (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TVirtualPad" -> case obj of+        TVirtualPad fptr -> let obj' = TVirtualPad (castForeignPtr fptr :: ForeignPtr RawTVirtualPad)+                        in  return . EGADTTVirtualPad . GADTTVirtualPadTVirtualPad $ obj'+    "TPad" -> case obj of+        TVirtualPad fptr -> let obj' = TPad (castForeignPtr fptr :: ForeignPtr RawTPad)+                        in  return . EGADTTVirtualPad . GADTTVirtualPadTPad $ obj'+    "TButton" -> case obj of+        TVirtualPad fptr -> let obj' = TButton (castForeignPtr fptr :: ForeignPtr RawTButton)+                        in  return . EGADTTVirtualPad . GADTTVirtualPadTButton $ obj'+    "TGroupButton" -> case obj of+        TVirtualPad fptr -> let obj' = TGroupButton (castForeignPtr fptr :: ForeignPtr RawTGroupButton)+                        in  return . EGADTTVirtualPad . GADTTVirtualPadTGroupButton $ obj'+    "TCanvas" -> case obj of+        TVirtualPad fptr -> let obj' = TCanvas (castForeignPtr fptr :: ForeignPtr RawTCanvas)+                        in  return . EGADTTVirtualPad . GADTTVirtualPadTCanvas $ obj'+    "TDialogCanvas" -> case obj of+        TVirtualPad fptr -> let obj' = TDialogCanvas (castForeignPtr fptr :: ForeignPtr RawTDialogCanvas)+                        in  return . EGADTTVirtualPad . GADTTVirtualPadTDialogCanvas $ obj'+    "TInspectCanvas" -> case obj of+        TVirtualPad fptr -> let obj' = TInspectCanvas (castForeignPtr fptr :: ForeignPtr RawTInspectCanvas)+                        in  return . EGADTTVirtualPad . GADTTVirtualPadTInspectCanvas $ obj'+    "TEvePad" -> case obj of+        TVirtualPad fptr -> let obj' = TEvePad (castForeignPtr fptr :: ForeignPtr RawTEvePad)+                        in  return . EGADTTVirtualPad . GADTTVirtualPadTEvePad $ obj'+    "TSlider" -> case obj of+        TVirtualPad fptr -> let obj' = TSlider (castForeignPtr fptr :: ForeignPtr RawTSlider)+                        in  return . EGADTTVirtualPad . GADTTVirtualPadTSlider $ obj'+    _         -> return . EGADTTVirtualPad $ GADTTVirtualPadBottom++++++instance GADTTypeable TH3S where+  data GADTType TH3S a where +    GADTTH3STH3S :: TH3S -> GADTType TH3S TH3S+    GADTTH3SBottom  :: GADTType TH3S BottomType+  data EGADTType TH3S = forall a. EGADTTH3S (GADTType TH3S a)++castTH3S :: Exist TH3S -> IO (EGADTType TH3S)+castTH3S eobj = do +  let obj = TH3S (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH3S" -> case obj of+        TH3S fptr -> let obj' = TH3S (castForeignPtr fptr :: ForeignPtr RawTH3S)+                        in  return . EGADTTH3S . GADTTH3STH3S $ obj'+    _         -> return . EGADTTH3S $ GADTTH3SBottom++++++instance GADTTypeable TH3I where+  data GADTType TH3I a where +    GADTTH3ITH3I :: TH3I -> GADTType TH3I TH3I+    GADTTH3IBottom  :: GADTType TH3I BottomType+  data EGADTType TH3I = forall a. EGADTTH3I (GADTType TH3I a)++castTH3I :: Exist TH3I -> IO (EGADTType TH3I)+castTH3I eobj = do +  let obj = TH3I (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH3I" -> case obj of+        TH3I fptr -> let obj' = TH3I (castForeignPtr fptr :: ForeignPtr RawTH3I)+                        in  return . EGADTTH3I . GADTTH3ITH3I $ obj'+    _         -> return . EGADTTH3I $ GADTTH3IBottom++++++instance GADTTypeable TH3F where+  data GADTType TH3F a where +    GADTTH3FTH3F :: TH3F -> GADTType TH3F TH3F+    GADTTH3FBottom  :: GADTType TH3F BottomType+  data EGADTType TH3F = forall a. EGADTTH3F (GADTType TH3F a)++castTH3F :: Exist TH3F -> IO (EGADTType TH3F)+castTH3F eobj = do +  let obj = TH3F (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH3F" -> case obj of+        TH3F fptr -> let obj' = TH3F (castForeignPtr fptr :: ForeignPtr RawTH3F)+                        in  return . EGADTTH3F . GADTTH3FTH3F $ obj'+    _         -> return . EGADTTH3F $ GADTTH3FBottom++++++instance GADTTypeable TH3D where+  data GADTType TH3D a where +    GADTTH3DTH3D :: TH3D -> GADTType TH3D TH3D+    GADTTH3DBottom  :: GADTType TH3D BottomType+  data EGADTType TH3D = forall a. EGADTTH3D (GADTType TH3D a)++castTH3D :: Exist TH3D -> IO (EGADTType TH3D)+castTH3D eobj = do +  let obj = TH3D (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH3D" -> case obj of+        TH3D fptr -> let obj' = TH3D (castForeignPtr fptr :: ForeignPtr RawTH3D)+                        in  return . EGADTTH3D . GADTTH3DTH3D $ obj'+    _         -> return . EGADTTH3D $ GADTTH3DBottom++++++instance GADTTypeable TH3C where+  data GADTType TH3C a where +    GADTTH3CTH3C :: TH3C -> GADTType TH3C TH3C+    GADTTH3CBottom  :: GADTType TH3C BottomType+  data EGADTType TH3C = forall a. EGADTTH3C (GADTType TH3C a)++castTH3C :: Exist TH3C -> IO (EGADTType TH3C)+castTH3C eobj = do +  let obj = TH3C (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH3C" -> case obj of+        TH3C fptr -> let obj' = TH3C (castForeignPtr fptr :: ForeignPtr RawTH3C)+                        in  return . EGADTTH3C . GADTTH3CTH3C $ obj'+    _         -> return . EGADTTH3C $ GADTTH3CBottom++++++instance GADTTypeable TH2S where+  data GADTType TH2S a where +    GADTTH2STH2S :: TH2S -> GADTType TH2S TH2S+    GADTTH2SBottom  :: GADTType TH2S BottomType+  data EGADTType TH2S = forall a. EGADTTH2S (GADTType TH2S a)++castTH2S :: Exist TH2S -> IO (EGADTType TH2S)+castTH2S eobj = do +  let obj = TH2S (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH2S" -> case obj of+        TH2S fptr -> let obj' = TH2S (castForeignPtr fptr :: ForeignPtr RawTH2S)+                        in  return . EGADTTH2S . GADTTH2STH2S $ obj'+    _         -> return . EGADTTH2S $ GADTTH2SBottom++++++instance GADTTypeable TH2Poly where+  data GADTType TH2Poly a where +    GADTTH2PolyTH2Poly :: TH2Poly -> GADTType TH2Poly TH2Poly+    GADTTH2PolyBottom  :: GADTType TH2Poly BottomType+  data EGADTType TH2Poly = forall a. EGADTTH2Poly (GADTType TH2Poly a)++castTH2Poly :: Exist TH2Poly -> IO (EGADTType TH2Poly)+castTH2Poly eobj = do +  let obj = TH2Poly (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH2Poly" -> case obj of+        TH2Poly fptr -> let obj' = TH2Poly (castForeignPtr fptr :: ForeignPtr RawTH2Poly)+                        in  return . EGADTTH2Poly . GADTTH2PolyTH2Poly $ obj'+    _         -> return . EGADTTH2Poly $ GADTTH2PolyBottom++++++instance GADTTypeable TH2I where+  data GADTType TH2I a where +    GADTTH2ITH2I :: TH2I -> GADTType TH2I TH2I+    GADTTH2IBottom  :: GADTType TH2I BottomType+  data EGADTType TH2I = forall a. EGADTTH2I (GADTType TH2I a)++castTH2I :: Exist TH2I -> IO (EGADTType TH2I)+castTH2I eobj = do +  let obj = TH2I (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH2I" -> case obj of+        TH2I fptr -> let obj' = TH2I (castForeignPtr fptr :: ForeignPtr RawTH2I)+                        in  return . EGADTTH2I . GADTTH2ITH2I $ obj'+    _         -> return . EGADTTH2I $ GADTTH2IBottom++++++instance GADTTypeable TH2F where+  data GADTType TH2F a where +    GADTTH2FTH2F :: TH2F -> GADTType TH2F TH2F+    GADTTH2FBottom  :: GADTType TH2F BottomType+  data EGADTType TH2F = forall a. EGADTTH2F (GADTType TH2F a)++castTH2F :: Exist TH2F -> IO (EGADTType TH2F)+castTH2F eobj = do +  let obj = TH2F (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH2F" -> case obj of+        TH2F fptr -> let obj' = TH2F (castForeignPtr fptr :: ForeignPtr RawTH2F)+                        in  return . EGADTTH2F . GADTTH2FTH2F $ obj'+    _         -> return . EGADTTH2F $ GADTTH2FBottom++++++instance GADTTypeable TH2D where+  data GADTType TH2D a where +    GADTTH2DTH2D :: TH2D -> GADTType TH2D TH2D+    GADTTH2DBottom  :: GADTType TH2D BottomType+  data EGADTType TH2D = forall a. EGADTTH2D (GADTType TH2D a)++castTH2D :: Exist TH2D -> IO (EGADTType TH2D)+castTH2D eobj = do +  let obj = TH2D (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH2D" -> case obj of+        TH2D fptr -> let obj' = TH2D (castForeignPtr fptr :: ForeignPtr RawTH2D)+                        in  return . EGADTTH2D . GADTTH2DTH2D $ obj'+    _         -> return . EGADTTH2D $ GADTTH2DBottom++++++instance GADTTypeable TH2C where+  data GADTType TH2C a where +    GADTTH2CTH2C :: TH2C -> GADTType TH2C TH2C+    GADTTH2CBottom  :: GADTType TH2C BottomType+  data EGADTType TH2C = forall a. EGADTTH2C (GADTType TH2C a)++castTH2C :: Exist TH2C -> IO (EGADTType TH2C)+castTH2C eobj = do +  let obj = TH2C (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH2C" -> case obj of+        TH2C fptr -> let obj' = TH2C (castForeignPtr fptr :: ForeignPtr RawTH2C)+                        in  return . EGADTTH2C . GADTTH2CTH2C $ obj'+    _         -> return . EGADTTH2C $ GADTTH2CBottom++++++instance GADTTypeable TH1S where+  data GADTType TH1S a where +    GADTTH1STH1S :: TH1S -> GADTType TH1S TH1S+    GADTTH1SBottom  :: GADTType TH1S BottomType+  data EGADTType TH1S = forall a. EGADTTH1S (GADTType TH1S a)++castTH1S :: Exist TH1S -> IO (EGADTType TH1S)+castTH1S eobj = do +  let obj = TH1S (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH1S" -> case obj of+        TH1S fptr -> let obj' = TH1S (castForeignPtr fptr :: ForeignPtr RawTH1S)+                        in  return . EGADTTH1S . GADTTH1STH1S $ obj'+    _         -> return . EGADTTH1S $ GADTTH1SBottom++++++instance GADTTypeable TH1I where+  data GADTType TH1I a where +    GADTTH1ITH1I :: TH1I -> GADTType TH1I TH1I+    GADTTH1IBottom  :: GADTType TH1I BottomType+  data EGADTType TH1I = forall a. EGADTTH1I (GADTType TH1I a)++castTH1I :: Exist TH1I -> IO (EGADTType TH1I)+castTH1I eobj = do +  let obj = TH1I (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH1I" -> case obj of+        TH1I fptr -> let obj' = TH1I (castForeignPtr fptr :: ForeignPtr RawTH1I)+                        in  return . EGADTTH1I . GADTTH1ITH1I $ obj'+    _         -> return . EGADTTH1I $ GADTTH1IBottom++++++instance GADTTypeable TH1F where+  data GADTType TH1F a where +    GADTTH1FTH1F :: TH1F -> GADTType TH1F TH1F+    GADTTH1FBottom  :: GADTType TH1F BottomType+  data EGADTType TH1F = forall a. EGADTTH1F (GADTType TH1F a)++castTH1F :: Exist TH1F -> IO (EGADTType TH1F)+castTH1F eobj = do +  let obj = TH1F (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH1F" -> case obj of+        TH1F fptr -> let obj' = TH1F (castForeignPtr fptr :: ForeignPtr RawTH1F)+                        in  return . EGADTTH1F . GADTTH1FTH1F $ obj'+    _         -> return . EGADTTH1F $ GADTTH1FBottom++++++instance GADTTypeable TH1D where+  data GADTType TH1D a where +    GADTTH1DTH1D :: TH1D -> GADTType TH1D TH1D+    GADTTH1DBottom  :: GADTType TH1D BottomType+  data EGADTType TH1D = forall a. EGADTTH1D (GADTType TH1D a)++castTH1D :: Exist TH1D -> IO (EGADTType TH1D)+castTH1D eobj = do +  let obj = TH1D (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH1D" -> case obj of+        TH1D fptr -> let obj' = TH1D (castForeignPtr fptr :: ForeignPtr RawTH1D)+                        in  return . EGADTTH1D . GADTTH1DTH1D $ obj'+    _         -> return . EGADTTH1D $ GADTTH1DBottom++++++instance GADTTypeable TH1C where+  data GADTType TH1C a where +    GADTTH1CTH1C :: TH1C -> GADTType TH1C TH1C+    GADTTH1CBottom  :: GADTType TH1C BottomType+  data EGADTType TH1C = forall a. EGADTTH1C (GADTType TH1C a)++castTH1C :: Exist TH1C -> IO (EGADTType TH1C)+castTH1C eobj = do +  let obj = TH1C (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH1C" -> case obj of+        TH1C fptr -> let obj' = TH1C (castForeignPtr fptr :: ForeignPtr RawTH1C)+                        in  return . EGADTTH1C . GADTTH1CTH1C $ obj'+    _         -> return . EGADTTH1C $ GADTTH1CBottom++++++instance GADTTypeable TH3 where+  data GADTType TH3 a where +    GADTTH3TH3 :: TH3 -> GADTType TH3 TH3+    GADTTH3TH3C :: TH3C -> GADTType TH3 TH3C+    GADTTH3TH3D :: TH3D -> GADTType TH3 TH3D+    GADTTH3TH3F :: TH3F -> GADTType TH3 TH3F+    GADTTH3TH3I :: TH3I -> GADTType TH3 TH3I+    GADTTH3TH3S :: TH3S -> GADTType TH3 TH3S+    GADTTH3Bottom  :: GADTType TH3 BottomType+  data EGADTType TH3 = forall a. EGADTTH3 (GADTType TH3 a)++castTH3 :: Exist TH3 -> IO (EGADTType TH3)+castTH3 eobj = do +  let obj = TH3 (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH3" -> case obj of+        TH3 fptr -> let obj' = TH3 (castForeignPtr fptr :: ForeignPtr RawTH3)+                        in  return . EGADTTH3 . GADTTH3TH3 $ obj'+    "TH3C" -> case obj of+        TH3 fptr -> let obj' = TH3C (castForeignPtr fptr :: ForeignPtr RawTH3C)+                        in  return . EGADTTH3 . GADTTH3TH3C $ obj'+    "TH3D" -> case obj of+        TH3 fptr -> let obj' = TH3D (castForeignPtr fptr :: ForeignPtr RawTH3D)+                        in  return . EGADTTH3 . GADTTH3TH3D $ obj'+    "TH3F" -> case obj of+        TH3 fptr -> let obj' = TH3F (castForeignPtr fptr :: ForeignPtr RawTH3F)+                        in  return . EGADTTH3 . GADTTH3TH3F $ obj'+    "TH3I" -> case obj of+        TH3 fptr -> let obj' = TH3I (castForeignPtr fptr :: ForeignPtr RawTH3I)+                        in  return . EGADTTH3 . GADTTH3TH3I $ obj'+    "TH3S" -> case obj of+        TH3 fptr -> let obj' = TH3S (castForeignPtr fptr :: ForeignPtr RawTH3S)+                        in  return . EGADTTH3 . GADTTH3TH3S $ obj'+    _         -> return . EGADTTH3 $ GADTTH3Bottom++++++instance GADTTypeable TH2 where+  data GADTType TH2 a where +    GADTTH2TH2 :: TH2 -> GADTType TH2 TH2+    GADTTH2TH2C :: TH2C -> GADTType TH2 TH2C+    GADTTH2TH2D :: TH2D -> GADTType TH2 TH2D+    GADTTH2TH2F :: TH2F -> GADTType TH2 TH2F+    GADTTH2TH2I :: TH2I -> GADTType TH2 TH2I+    GADTTH2TH2Poly :: TH2Poly -> GADTType TH2 TH2Poly+    GADTTH2TH2S :: TH2S -> GADTType TH2 TH2S+    GADTTH2Bottom  :: GADTType TH2 BottomType+  data EGADTType TH2 = forall a. EGADTTH2 (GADTType TH2 a)++castTH2 :: Exist TH2 -> IO (EGADTType TH2)+castTH2 eobj = do +  let obj = TH2 (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH2" -> case obj of+        TH2 fptr -> let obj' = TH2 (castForeignPtr fptr :: ForeignPtr RawTH2)+                        in  return . EGADTTH2 . GADTTH2TH2 $ obj'+    "TH2C" -> case obj of+        TH2 fptr -> let obj' = TH2C (castForeignPtr fptr :: ForeignPtr RawTH2C)+                        in  return . EGADTTH2 . GADTTH2TH2C $ obj'+    "TH2D" -> case obj of+        TH2 fptr -> let obj' = TH2D (castForeignPtr fptr :: ForeignPtr RawTH2D)+                        in  return . EGADTTH2 . GADTTH2TH2D $ obj'+    "TH2F" -> case obj of+        TH2 fptr -> let obj' = TH2F (castForeignPtr fptr :: ForeignPtr RawTH2F)+                        in  return . EGADTTH2 . GADTTH2TH2F $ obj'+    "TH2I" -> case obj of+        TH2 fptr -> let obj' = TH2I (castForeignPtr fptr :: ForeignPtr RawTH2I)+                        in  return . EGADTTH2 . GADTTH2TH2I $ obj'+    "TH2Poly" -> case obj of+        TH2 fptr -> let obj' = TH2Poly (castForeignPtr fptr :: ForeignPtr RawTH2Poly)+                        in  return . EGADTTH2 . GADTTH2TH2Poly $ obj'+    "TH2S" -> case obj of+        TH2 fptr -> let obj' = TH2S (castForeignPtr fptr :: ForeignPtr RawTH2S)+                        in  return . EGADTTH2 . GADTTH2TH2S $ obj'+    _         -> return . EGADTTH2 $ GADTTH2Bottom++++++instance GADTTypeable TH1 where+  data GADTType TH1 a where +    GADTTH1TH1 :: TH1 -> GADTType TH1 TH1+    GADTTH1TH2 :: TH2 -> GADTType TH1 TH2+    GADTTH1TH3 :: TH3 -> GADTType TH1 TH3+    GADTTH1TH1C :: TH1C -> GADTType TH1 TH1C+    GADTTH1TH1D :: TH1D -> GADTType TH1 TH1D+    GADTTH1TH1F :: TH1F -> GADTType TH1 TH1F+    GADTTH1TH1I :: TH1I -> GADTType TH1 TH1I+    GADTTH1TH1S :: TH1S -> GADTType TH1 TH1S+    GADTTH1TH2C :: TH2C -> GADTType TH1 TH2C+    GADTTH1TH2D :: TH2D -> GADTType TH1 TH2D+    GADTTH1TH2F :: TH2F -> GADTType TH1 TH2F+    GADTTH1TH2I :: TH2I -> GADTType TH1 TH2I+    GADTTH1TH2Poly :: TH2Poly -> GADTType TH1 TH2Poly+    GADTTH1TH2S :: TH2S -> GADTType TH1 TH2S+    GADTTH1TH3C :: TH3C -> GADTType TH1 TH3C+    GADTTH1TH3D :: TH3D -> GADTType TH1 TH3D+    GADTTH1TH3F :: TH3F -> GADTType TH1 TH3F+    GADTTH1TH3I :: TH3I -> GADTType TH1 TH3I+    GADTTH1TH3S :: TH3S -> GADTType TH1 TH3S+    GADTTH1Bottom  :: GADTType TH1 BottomType+  data EGADTType TH1 = forall a. EGADTTH1 (GADTType TH1 a)++castTH1 :: Exist TH1 -> IO (EGADTType TH1)+castTH1 eobj = do +  let obj = TH1 (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TH1" -> case obj of+        TH1 fptr -> let obj' = TH1 (castForeignPtr fptr :: ForeignPtr RawTH1)+                        in  return . EGADTTH1 . GADTTH1TH1 $ obj'+    "TH2" -> case obj of+        TH1 fptr -> let obj' = TH2 (castForeignPtr fptr :: ForeignPtr RawTH2)+                        in  return . EGADTTH1 . GADTTH1TH2 $ obj'+    "TH3" -> case obj of+        TH1 fptr -> let obj' = TH3 (castForeignPtr fptr :: ForeignPtr RawTH3)+                        in  return . EGADTTH1 . GADTTH1TH3 $ obj'+    "TH1C" -> case obj of+        TH1 fptr -> let obj' = TH1C (castForeignPtr fptr :: ForeignPtr RawTH1C)+                        in  return . EGADTTH1 . GADTTH1TH1C $ obj'+    "TH1D" -> case obj of+        TH1 fptr -> let obj' = TH1D (castForeignPtr fptr :: ForeignPtr RawTH1D)+                        in  return . EGADTTH1 . GADTTH1TH1D $ obj'+    "TH1F" -> case obj of+        TH1 fptr -> let obj' = TH1F (castForeignPtr fptr :: ForeignPtr RawTH1F)+                        in  return . EGADTTH1 . GADTTH1TH1F $ obj'+    "TH1I" -> case obj of+        TH1 fptr -> let obj' = TH1I (castForeignPtr fptr :: ForeignPtr RawTH1I)+                        in  return . EGADTTH1 . GADTTH1TH1I $ obj'+    "TH1S" -> case obj of+        TH1 fptr -> let obj' = TH1S (castForeignPtr fptr :: ForeignPtr RawTH1S)+                        in  return . EGADTTH1 . GADTTH1TH1S $ obj'+    "TH2C" -> case obj of+        TH1 fptr -> let obj' = TH2C (castForeignPtr fptr :: ForeignPtr RawTH2C)+                        in  return . EGADTTH1 . GADTTH1TH2C $ obj'+    "TH2D" -> case obj of+        TH1 fptr -> let obj' = TH2D (castForeignPtr fptr :: ForeignPtr RawTH2D)+                        in  return . EGADTTH1 . GADTTH1TH2D $ obj'+    "TH2F" -> case obj of+        TH1 fptr -> let obj' = TH2F (castForeignPtr fptr :: ForeignPtr RawTH2F)+                        in  return . EGADTTH1 . GADTTH1TH2F $ obj'+    "TH2I" -> case obj of+        TH1 fptr -> let obj' = TH2I (castForeignPtr fptr :: ForeignPtr RawTH2I)+                        in  return . EGADTTH1 . GADTTH1TH2I $ obj'+    "TH2Poly" -> case obj of+        TH1 fptr -> let obj' = TH2Poly (castForeignPtr fptr :: ForeignPtr RawTH2Poly)+                        in  return . EGADTTH1 . GADTTH1TH2Poly $ obj'+    "TH2S" -> case obj of+        TH1 fptr -> let obj' = TH2S (castForeignPtr fptr :: ForeignPtr RawTH2S)+                        in  return . EGADTTH1 . GADTTH1TH2S $ obj'+    "TH3C" -> case obj of+        TH1 fptr -> let obj' = TH3C (castForeignPtr fptr :: ForeignPtr RawTH3C)+                        in  return . EGADTTH1 . GADTTH1TH3C $ obj'+    "TH3D" -> case obj of+        TH1 fptr -> let obj' = TH3D (castForeignPtr fptr :: ForeignPtr RawTH3D)+                        in  return . EGADTTH1 . GADTTH1TH3D $ obj'+    "TH3F" -> case obj of+        TH1 fptr -> let obj' = TH3F (castForeignPtr fptr :: ForeignPtr RawTH3F)+                        in  return . EGADTTH1 . GADTTH1TH3F $ obj'+    "TH3I" -> case obj of+        TH1 fptr -> let obj' = TH3I (castForeignPtr fptr :: ForeignPtr RawTH3I)+                        in  return . EGADTTH1 . GADTTH1TH3I $ obj'+    "TH3S" -> case obj of+        TH1 fptr -> let obj' = TH3S (castForeignPtr fptr :: ForeignPtr RawTH3S)+                        in  return . EGADTTH1 . GADTTH1TH3S $ obj'+    _         -> return . EGADTTH1 $ GADTTH1Bottom++++++instance GADTTypeable TTreePlayer where+  data GADTType TTreePlayer a where +    GADTTTreePlayerTTreePlayer :: TTreePlayer -> GADTType TTreePlayer TTreePlayer+    GADTTTreePlayerBottom  :: GADTType TTreePlayer BottomType+  data EGADTType TTreePlayer = forall a. EGADTTTreePlayer (GADTType TTreePlayer a)++castTTreePlayer :: Exist TTreePlayer -> IO (EGADTType TTreePlayer)+castTTreePlayer eobj = do +  let obj = TTreePlayer (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TTreePlayer" -> case obj of+        TTreePlayer fptr -> let obj' = TTreePlayer (castForeignPtr fptr :: ForeignPtr RawTTreePlayer)+                        in  return . EGADTTTreePlayer . GADTTTreePlayerTTreePlayer $ obj'+    _         -> return . EGADTTTreePlayer $ GADTTTreePlayerBottom++++++instance GADTTypeable TVirtualTreePlayer where+  data GADTType TVirtualTreePlayer a where +    GADTTVirtualTreePlayerTVirtualTreePlayer :: TVirtualTreePlayer -> GADTType TVirtualTreePlayer TVirtualTreePlayer+    GADTTVirtualTreePlayerTTreePlayer :: TTreePlayer -> GADTType TVirtualTreePlayer TTreePlayer+    GADTTVirtualTreePlayerBottom  :: GADTType TVirtualTreePlayer BottomType+  data EGADTType TVirtualTreePlayer = forall a. EGADTTVirtualTreePlayer (GADTType TVirtualTreePlayer a)++castTVirtualTreePlayer :: Exist TVirtualTreePlayer -> IO (EGADTType TVirtualTreePlayer)+castTVirtualTreePlayer eobj = do +  let obj = TVirtualTreePlayer (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TVirtualTreePlayer" -> case obj of+        TVirtualTreePlayer fptr -> let obj' = TVirtualTreePlayer (castForeignPtr fptr :: ForeignPtr RawTVirtualTreePlayer)+                        in  return . EGADTTVirtualTreePlayer . GADTTVirtualTreePlayerTVirtualTreePlayer $ obj'+    "TTreePlayer" -> case obj of+        TVirtualTreePlayer fptr -> let obj' = TTreePlayer (castForeignPtr fptr :: ForeignPtr RawTTreePlayer)+                        in  return . EGADTTVirtualTreePlayer . GADTTVirtualTreePlayerTTreePlayer $ obj'+    _         -> return . EGADTTVirtualTreePlayer $ GADTTVirtualTreePlayerBottom++++++instance GADTTypeable TBranch where+  data GADTType TBranch a where +    GADTTBranchTBranch :: TBranch -> GADTType TBranch TBranch+    GADTTBranchBottom  :: GADTType TBranch BottomType+  data EGADTType TBranch = forall a. EGADTTBranch (GADTType TBranch a)++castTBranch :: Exist TBranch -> IO (EGADTType TBranch)+castTBranch eobj = do +  let obj = TBranch (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TBranch" -> case obj of+        TBranch fptr -> let obj' = TBranch (castForeignPtr fptr :: ForeignPtr RawTBranch)+                        in  return . EGADTTBranch . GADTTBranchTBranch $ obj'+    _         -> return . EGADTTBranch $ GADTTBranchBottom++++++instance GADTTypeable TFile where+  data GADTType TFile a where +    GADTTFileTFile :: TFile -> GADTType TFile TFile+    GADTTFileBottom  :: GADTType TFile BottomType+  data EGADTType TFile = forall a. EGADTTFile (GADTType TFile a)++castTFile :: Exist TFile -> IO (EGADTType TFile)+castTFile eobj = do +  let obj = TFile (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TFile" -> case obj of+        TFile fptr -> let obj' = TFile (castForeignPtr fptr :: ForeignPtr RawTFile)+                        in  return . EGADTTFile . GADTTFileTFile $ obj'+    _         -> return . EGADTTFile $ GADTTFileBottom++++++instance GADTTypeable TDirectoryFile where+  data GADTType TDirectoryFile a where +    GADTTDirectoryFileTDirectoryFile :: TDirectoryFile -> GADTType TDirectoryFile TDirectoryFile+    GADTTDirectoryFileTFile :: TFile -> GADTType TDirectoryFile TFile+    GADTTDirectoryFileBottom  :: GADTType TDirectoryFile BottomType+  data EGADTType TDirectoryFile = forall a. EGADTTDirectoryFile (GADTType TDirectoryFile a)++castTDirectoryFile :: Exist TDirectoryFile -> IO (EGADTType TDirectoryFile)+castTDirectoryFile eobj = do +  let obj = TDirectoryFile (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TDirectoryFile" -> case obj of+        TDirectoryFile fptr -> let obj' = TDirectoryFile (castForeignPtr fptr :: ForeignPtr RawTDirectoryFile)+                        in  return . EGADTTDirectoryFile . GADTTDirectoryFileTDirectoryFile $ obj'+    "TFile" -> case obj of+        TDirectoryFile fptr -> let obj' = TFile (castForeignPtr fptr :: ForeignPtr RawTFile)+                        in  return . EGADTTDirectoryFile . GADTTDirectoryFileTFile $ obj'+    _         -> return . EGADTTDirectoryFile $ GADTTDirectoryFileBottom++++++instance GADTTypeable TDirectory where+  data GADTType TDirectory a where +    GADTTDirectoryTDirectory :: TDirectory -> GADTType TDirectory TDirectory+    GADTTDirectoryTDirectoryFile :: TDirectoryFile -> GADTType TDirectory TDirectoryFile+    GADTTDirectoryTFile :: TFile -> GADTType TDirectory TFile+    GADTTDirectoryBottom  :: GADTType TDirectory BottomType+  data EGADTType TDirectory = forall a. EGADTTDirectory (GADTType TDirectory a)++castTDirectory :: Exist TDirectory -> IO (EGADTType TDirectory)+castTDirectory eobj = do +  let obj = TDirectory (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TDirectory" -> case obj of+        TDirectory fptr -> let obj' = TDirectory (castForeignPtr fptr :: ForeignPtr RawTDirectory)+                        in  return . EGADTTDirectory . GADTTDirectoryTDirectory $ obj'+    "TDirectoryFile" -> case obj of+        TDirectory fptr -> let obj' = TDirectoryFile (castForeignPtr fptr :: ForeignPtr RawTDirectoryFile)+                        in  return . EGADTTDirectory . GADTTDirectoryTDirectoryFile $ obj'+    "TFile" -> case obj of+        TDirectory fptr -> let obj' = TFile (castForeignPtr fptr :: ForeignPtr RawTFile)+                        in  return . EGADTTDirectory . GADTTDirectoryTFile $ obj'+    _         -> return . EGADTTDirectory $ GADTTDirectoryBottom++++++instance GADTTypeable TText where+  data GADTType TText a where +    GADTTTextTLatex :: TLatex -> GADTType TText TLatex+    GADTTTextTText :: TText -> GADTType TText TText+    GADTTTextBottom  :: GADTType TText BottomType+  data EGADTType TText = forall a. EGADTTText (GADTType TText a)++castTText :: Exist TText -> IO (EGADTType TText)+castTText eobj = do +  let obj = TText (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TLatex" -> case obj of+        TText fptr -> let obj' = TLatex (castForeignPtr fptr :: ForeignPtr RawTLatex)+                        in  return . EGADTTText . GADTTTextTLatex $ obj'+    "TText" -> case obj of+        TText fptr -> let obj' = TText (castForeignPtr fptr :: ForeignPtr RawTText)+                        in  return . EGADTTText . GADTTTextTText $ obj'+    _         -> return . EGADTTText $ GADTTTextBottom++++++instance GADTTypeable TLatex where+  data GADTType TLatex a where +    GADTTLatexTLatex :: TLatex -> GADTType TLatex TLatex+    GADTTLatexBottom  :: GADTType TLatex BottomType+  data EGADTType TLatex = forall a. EGADTTLatex (GADTType TLatex a)++castTLatex :: Exist TLatex -> IO (EGADTType TLatex)+castTLatex eobj = do +  let obj = TLatex (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TLatex" -> case obj of+        TLatex fptr -> let obj' = TLatex (castForeignPtr fptr :: ForeignPtr RawTLatex)+                        in  return . EGADTTLatex . GADTTLatexTLatex $ obj'+    _         -> return . EGADTTLatex $ GADTTLatexBottom++++++instance GADTTypeable TAxis where+  data GADTType TAxis a where +    GADTTAxisTAxis :: TAxis -> GADTType TAxis TAxis+    GADTTAxisBottom  :: GADTType TAxis BottomType+  data EGADTType TAxis = forall a. EGADTTAxis (GADTType TAxis a)++castTAxis :: Exist TAxis -> IO (EGADTType TAxis)+castTAxis eobj = do +  let obj = TAxis (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TAxis" -> case obj of+        TAxis fptr -> let obj' = TAxis (castForeignPtr fptr :: ForeignPtr RawTAxis)+                        in  return . EGADTTAxis . GADTTAxisTAxis $ obj'+    _         -> return . EGADTTAxis $ GADTTAxisBottom++++++instance GADTTypeable TEfficiency where+  data GADTType TEfficiency a where +    GADTTEfficiencyTEfficiency :: TEfficiency -> GADTType TEfficiency TEfficiency+    GADTTEfficiencyBottom  :: GADTType TEfficiency BottomType+  data EGADTType TEfficiency = forall a. EGADTTEfficiency (GADTType TEfficiency a)++castTEfficiency :: Exist TEfficiency -> IO (EGADTType TEfficiency)+castTEfficiency eobj = do +  let obj = TEfficiency (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TEfficiency" -> case obj of+        TEfficiency fptr -> let obj' = TEfficiency (castForeignPtr fptr :: ForeignPtr RawTEfficiency)+                        in  return . EGADTTEfficiency . GADTTEfficiencyTEfficiency $ obj'+    _         -> return . EGADTTEfficiency $ GADTTEfficiencyBottom++++++instance GADTTypeable TCurlyArc where+  data GADTType TCurlyArc a where +    GADTTCurlyArcTCurlyArc :: TCurlyArc -> GADTType TCurlyArc TCurlyArc+    GADTTCurlyArcBottom  :: GADTType TCurlyArc BottomType+  data EGADTType TCurlyArc = forall a. EGADTTCurlyArc (GADTType TCurlyArc a)++castTCurlyArc :: Exist TCurlyArc -> IO (EGADTType TCurlyArc)+castTCurlyArc eobj = do +  let obj = TCurlyArc (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TCurlyArc" -> case obj of+        TCurlyArc fptr -> let obj' = TCurlyArc (castForeignPtr fptr :: ForeignPtr RawTCurlyArc)+                        in  return . EGADTTCurlyArc . GADTTCurlyArcTCurlyArc $ obj'+    _         -> return . EGADTTCurlyArc $ GADTTCurlyArcBottom++++++instance GADTTypeable TCurlyLine where+  data GADTType TCurlyLine a where +    GADTTCurlyLineTCurlyLine :: TCurlyLine -> GADTType TCurlyLine TCurlyLine+    GADTTCurlyLineTCurlyArc :: TCurlyArc -> GADTType TCurlyLine TCurlyArc+    GADTTCurlyLineBottom  :: GADTType TCurlyLine BottomType+  data EGADTType TCurlyLine = forall a. EGADTTCurlyLine (GADTType TCurlyLine a)++castTCurlyLine :: Exist TCurlyLine -> IO (EGADTType TCurlyLine)+castTCurlyLine eobj = do +  let obj = TCurlyLine (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TCurlyLine" -> case obj of+        TCurlyLine fptr -> let obj' = TCurlyLine (castForeignPtr fptr :: ForeignPtr RawTCurlyLine)+                        in  return . EGADTTCurlyLine . GADTTCurlyLineTCurlyLine $ obj'+    "TCurlyArc" -> case obj of+        TCurlyLine fptr -> let obj' = TCurlyArc (castForeignPtr fptr :: ForeignPtr RawTCurlyArc)+                        in  return . EGADTTCurlyLine . GADTTCurlyLineTCurlyArc $ obj'+    _         -> return . EGADTTCurlyLine $ GADTTCurlyLineBottom++++++instance GADTTypeable TPolyLine where+  data GADTType TPolyLine a where +    GADTTPolyLineTPolyLine :: TPolyLine -> GADTType TPolyLine TPolyLine+    GADTTPolyLineTCurlyLine :: TCurlyLine -> GADTType TPolyLine TCurlyLine+    GADTTPolyLineTCurlyArc :: TCurlyArc -> GADTType TPolyLine TCurlyArc+    GADTTPolyLineBottom  :: GADTType TPolyLine BottomType+  data EGADTType TPolyLine = forall a. EGADTTPolyLine (GADTType TPolyLine a)++castTPolyLine :: Exist TPolyLine -> IO (EGADTType TPolyLine)+castTPolyLine eobj = do +  let obj = TPolyLine (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TPolyLine" -> case obj of+        TPolyLine fptr -> let obj' = TPolyLine (castForeignPtr fptr :: ForeignPtr RawTPolyLine)+                        in  return . EGADTTPolyLine . GADTTPolyLineTPolyLine $ obj'+    "TCurlyLine" -> case obj of+        TPolyLine fptr -> let obj' = TCurlyLine (castForeignPtr fptr :: ForeignPtr RawTCurlyLine)+                        in  return . EGADTTPolyLine . GADTTPolyLineTCurlyLine $ obj'+    "TCurlyArc" -> case obj of+        TPolyLine fptr -> let obj' = TCurlyArc (castForeignPtr fptr :: ForeignPtr RawTCurlyArc)+                        in  return . EGADTTPolyLine . GADTTPolyLineTCurlyArc $ obj'+    _         -> return . EGADTTPolyLine $ GADTTPolyLineBottom++++++instance GADTTypeable TTreeSQL where+  data GADTType TTreeSQL a where +    GADTTTreeSQLTTreeSQL :: TTreeSQL -> GADTType TTreeSQL TTreeSQL+    GADTTTreeSQLBottom  :: GADTType TTreeSQL BottomType+  data EGADTType TTreeSQL = forall a. EGADTTTreeSQL (GADTType TTreeSQL a)++castTTreeSQL :: Exist TTreeSQL -> IO (EGADTType TTreeSQL)+castTTreeSQL eobj = do +  let obj = TTreeSQL (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TTreeSQL" -> case obj of+        TTreeSQL fptr -> let obj' = TTreeSQL (castForeignPtr fptr :: ForeignPtr RawTTreeSQL)+                        in  return . EGADTTTreeSQL . GADTTTreeSQLTTreeSQL $ obj'+    _         -> return . EGADTTTreeSQL $ GADTTTreeSQLBottom++++++instance GADTTypeable TNtupleD where+  data GADTType TNtupleD a where +    GADTTNtupleDTNtupleD :: TNtupleD -> GADTType TNtupleD TNtupleD+    GADTTNtupleDBottom  :: GADTType TNtupleD BottomType+  data EGADTType TNtupleD = forall a. EGADTTNtupleD (GADTType TNtupleD a)++castTNtupleD :: Exist TNtupleD -> IO (EGADTType TNtupleD)+castTNtupleD eobj = do +  let obj = TNtupleD (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TNtupleD" -> case obj of+        TNtupleD fptr -> let obj' = TNtupleD (castForeignPtr fptr :: ForeignPtr RawTNtupleD)+                        in  return . EGADTTNtupleD . GADTTNtupleDTNtupleD $ obj'+    _         -> return . EGADTTNtupleD $ GADTTNtupleDBottom++++++instance GADTTypeable TNtuple where+  data GADTType TNtuple a where +    GADTTNtupleTNtuple :: TNtuple -> GADTType TNtuple TNtuple+    GADTTNtupleBottom  :: GADTType TNtuple BottomType+  data EGADTType TNtuple = forall a. EGADTTNtuple (GADTType TNtuple a)++castTNtuple :: Exist TNtuple -> IO (EGADTType TNtuple)+castTNtuple eobj = do +  let obj = TNtuple (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TNtuple" -> case obj of+        TNtuple fptr -> let obj' = TNtuple (castForeignPtr fptr :: ForeignPtr RawTNtuple)+                        in  return . EGADTTNtuple . GADTTNtupleTNtuple $ obj'+    _         -> return . EGADTTNtuple $ GADTTNtupleBottom++++++instance GADTTypeable TChain where+  data GADTType TChain a where +    GADTTChainTChain :: TChain -> GADTType TChain TChain+    GADTTChainBottom  :: GADTType TChain BottomType+  data EGADTType TChain = forall a. EGADTTChain (GADTType TChain a)++castTChain :: Exist TChain -> IO (EGADTType TChain)+castTChain eobj = do +  let obj = TChain (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TChain" -> case obj of+        TChain fptr -> let obj' = TChain (castForeignPtr fptr :: ForeignPtr RawTChain)+                        in  return . EGADTTChain . GADTTChainTChain $ obj'+    _         -> return . EGADTTChain $ GADTTChainBottom++++++instance GADTTypeable TTree where+  data GADTType TTree a where +    GADTTTreeTTree :: TTree -> GADTType TTree TTree+    GADTTTreeTChain :: TChain -> GADTType TTree TChain+    GADTTTreeTNtuple :: TNtuple -> GADTType TTree TNtuple+    GADTTTreeTNtupleD :: TNtupleD -> GADTType TTree TNtupleD+    GADTTTreeTTreeSQL :: TTreeSQL -> GADTType TTree TTreeSQL+    GADTTTreeBottom  :: GADTType TTree BottomType+  data EGADTType TTree = forall a. EGADTTTree (GADTType TTree a)++castTTree :: Exist TTree -> IO (EGADTType TTree)+castTTree eobj = do +  let obj = TTree (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TTree" -> case obj of+        TTree fptr -> let obj' = TTree (castForeignPtr fptr :: ForeignPtr RawTTree)+                        in  return . EGADTTTree . GADTTTreeTTree $ obj'+    "TChain" -> case obj of+        TTree fptr -> let obj' = TChain (castForeignPtr fptr :: ForeignPtr RawTChain)+                        in  return . EGADTTTree . GADTTTreeTChain $ obj'+    "TNtuple" -> case obj of+        TTree fptr -> let obj' = TNtuple (castForeignPtr fptr :: ForeignPtr RawTNtuple)+                        in  return . EGADTTTree . GADTTTreeTNtuple $ obj'+    "TNtupleD" -> case obj of+        TTree fptr -> let obj' = TNtupleD (castForeignPtr fptr :: ForeignPtr RawTNtupleD)+                        in  return . EGADTTTree . GADTTTreeTNtupleD $ obj'+    "TTreeSQL" -> case obj of+        TTree fptr -> let obj' = TTreeSQL (castForeignPtr fptr :: ForeignPtr RawTTreeSQL)+                        in  return . EGADTTTree . GADTTTreeTTreeSQL $ obj'+    _         -> return . EGADTTTree $ GADTTTreeBottom++++++instance GADTTypeable TSliderBox where+  data GADTType TSliderBox a where +    GADTTSliderBoxTSliderBox :: TSliderBox -> GADTType TSliderBox TSliderBox+    GADTTSliderBoxBottom  :: GADTType TSliderBox BottomType+  data EGADTType TSliderBox = forall a. EGADTTSliderBox (GADTType TSliderBox a)++castTSliderBox :: Exist TSliderBox -> IO (EGADTType TSliderBox)+castTSliderBox eobj = do +  let obj = TSliderBox (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TSliderBox" -> case obj of+        TSliderBox fptr -> let obj' = TSliderBox (castForeignPtr fptr :: ForeignPtr RawTSliderBox)+                        in  return . EGADTTSliderBox . GADTTSliderBoxTSliderBox $ obj'+    _         -> return . EGADTTSliderBox $ GADTTSliderBoxBottom++++++instance GADTTypeable TFrame where+  data GADTType TFrame a where +    GADTTFrameTFrame :: TFrame -> GADTType TFrame TFrame+    GADTTFrameBottom  :: GADTType TFrame BottomType+  data EGADTType TFrame = forall a. EGADTTFrame (GADTType TFrame a)++castTFrame :: Exist TFrame -> IO (EGADTType TFrame)+castTFrame eobj = do +  let obj = TFrame (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TFrame" -> case obj of+        TFrame fptr -> let obj' = TFrame (castForeignPtr fptr :: ForeignPtr RawTFrame)+                        in  return . EGADTTFrame . GADTTFrameTFrame $ obj'+    _         -> return . EGADTTFrame $ GADTTFrameBottom++++++instance GADTTypeable TWbox where+  data GADTType TWbox a where +    GADTTWboxTWbox :: TWbox -> GADTType TWbox TWbox+    GADTTWboxTFrame :: TFrame -> GADTType TWbox TFrame+    GADTTWboxTSliderBox :: TSliderBox -> GADTType TWbox TSliderBox+    GADTTWboxBottom  :: GADTType TWbox BottomType+  data EGADTType TWbox = forall a. EGADTTWbox (GADTType TWbox a)++castTWbox :: Exist TWbox -> IO (EGADTType TWbox)+castTWbox eobj = do +  let obj = TWbox (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TWbox" -> case obj of+        TWbox fptr -> let obj' = TWbox (castForeignPtr fptr :: ForeignPtr RawTWbox)+                        in  return . EGADTTWbox . GADTTWboxTWbox $ obj'+    "TFrame" -> case obj of+        TWbox fptr -> let obj' = TFrame (castForeignPtr fptr :: ForeignPtr RawTFrame)+                        in  return . EGADTTWbox . GADTTWboxTFrame $ obj'+    "TSliderBox" -> case obj of+        TWbox fptr -> let obj' = TSliderBox (castForeignPtr fptr :: ForeignPtr RawTSliderBox)+                        in  return . EGADTTWbox . GADTTWboxTSliderBox $ obj'+    _         -> return . EGADTTWbox $ GADTTWboxBottom++++++instance GADTTypeable TPaveClass where+  data GADTType TPaveClass a where +    GADTTPaveClassTPaveClass :: TPaveClass -> GADTType TPaveClass TPaveClass+    GADTTPaveClassBottom  :: GADTType TPaveClass BottomType+  data EGADTType TPaveClass = forall a. EGADTTPaveClass (GADTType TPaveClass a)++castTPaveClass :: Exist TPaveClass -> IO (EGADTType TPaveClass)+castTPaveClass eobj = do +  let obj = TPaveClass (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TPaveClass" -> case obj of+        TPaveClass fptr -> let obj' = TPaveClass (castForeignPtr fptr :: ForeignPtr RawTPaveClass)+                        in  return . EGADTTPaveClass . GADTTPaveClassTPaveClass $ obj'+    _         -> return . EGADTTPaveClass $ GADTTPaveClassBottom++++++instance GADTTypeable TPaveLabel where+  data GADTType TPaveLabel a where +    GADTTPaveLabelTPaveLabel :: TPaveLabel -> GADTType TPaveLabel TPaveLabel+    GADTTPaveLabelTPaveClass :: TPaveClass -> GADTType TPaveLabel TPaveClass+    GADTTPaveLabelBottom  :: GADTType TPaveLabel BottomType+  data EGADTType TPaveLabel = forall a. EGADTTPaveLabel (GADTType TPaveLabel a)++castTPaveLabel :: Exist TPaveLabel -> IO (EGADTType TPaveLabel)+castTPaveLabel eobj = do +  let obj = TPaveLabel (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TPaveLabel" -> case obj of+        TPaveLabel fptr -> let obj' = TPaveLabel (castForeignPtr fptr :: ForeignPtr RawTPaveLabel)+                        in  return . EGADTTPaveLabel . GADTTPaveLabelTPaveLabel $ obj'+    "TPaveClass" -> case obj of+        TPaveLabel fptr -> let obj' = TPaveClass (castForeignPtr fptr :: ForeignPtr RawTPaveClass)+                        in  return . EGADTTPaveLabel . GADTTPaveLabelTPaveClass $ obj'+    _         -> return . EGADTTPaveLabel $ GADTTPaveLabelBottom++++++instance GADTTypeable TLegend where+  data GADTType TLegend a where +    GADTTLegendTLegend :: TLegend -> GADTType TLegend TLegend+    GADTTLegendBottom  :: GADTType TLegend BottomType+  data EGADTType TLegend = forall a. EGADTTLegend (GADTType TLegend a)++castTLegend :: Exist TLegend -> IO (EGADTType TLegend)+castTLegend eobj = do +  let obj = TLegend (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TLegend" -> case obj of+        TLegend fptr -> let obj' = TLegend (castForeignPtr fptr :: ForeignPtr RawTLegend)+                        in  return . EGADTTLegend . GADTTLegendTLegend $ obj'+    _         -> return . EGADTTLegend $ GADTTLegendBottom++++++instance GADTTypeable TPavesText where+  data GADTType TPavesText a where +    GADTTPavesTextTPavesText :: TPavesText -> GADTType TPavesText TPavesText+    GADTTPavesTextBottom  :: GADTType TPavesText BottomType+  data EGADTType TPavesText = forall a. EGADTTPavesText (GADTType TPavesText a)++castTPavesText :: Exist TPavesText -> IO (EGADTType TPavesText)+castTPavesText eobj = do +  let obj = TPavesText (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TPavesText" -> case obj of+        TPavesText fptr -> let obj' = TPavesText (castForeignPtr fptr :: ForeignPtr RawTPavesText)+                        in  return . EGADTTPavesText . GADTTPavesTextTPavesText $ obj'+    _         -> return . EGADTTPavesText $ GADTTPavesTextBottom++++++instance GADTTypeable TPaveStats where+  data GADTType TPaveStats a where +    GADTTPaveStatsTPaveStats :: TPaveStats -> GADTType TPaveStats TPaveStats+    GADTTPaveStatsBottom  :: GADTType TPaveStats BottomType+  data EGADTType TPaveStats = forall a. EGADTTPaveStats (GADTType TPaveStats a)++castTPaveStats :: Exist TPaveStats -> IO (EGADTType TPaveStats)+castTPaveStats eobj = do +  let obj = TPaveStats (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TPaveStats" -> case obj of+        TPaveStats fptr -> let obj' = TPaveStats (castForeignPtr fptr :: ForeignPtr RawTPaveStats)+                        in  return . EGADTTPaveStats . GADTTPaveStatsTPaveStats $ obj'+    _         -> return . EGADTTPaveStats $ GADTTPaveStatsBottom++++++instance GADTTypeable TDiamond where+  data GADTType TDiamond a where +    GADTTDiamondTDiamond :: TDiamond -> GADTType TDiamond TDiamond+    GADTTDiamondBottom  :: GADTType TDiamond BottomType+  data EGADTType TDiamond = forall a. EGADTTDiamond (GADTType TDiamond a)++castTDiamond :: Exist TDiamond -> IO (EGADTType TDiamond)+castTDiamond eobj = do +  let obj = TDiamond (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TDiamond" -> case obj of+        TDiamond fptr -> let obj' = TDiamond (castForeignPtr fptr :: ForeignPtr RawTDiamond)+                        in  return . EGADTTDiamond . GADTTDiamondTDiamond $ obj'+    _         -> return . EGADTTDiamond $ GADTTDiamondBottom++++++instance GADTTypeable TPaveText where+  data GADTType TPaveText a where +    GADTTPaveTextTPaveText :: TPaveText -> GADTType TPaveText TPaveText+    GADTTPaveTextTDiamond :: TDiamond -> GADTType TPaveText TDiamond+    GADTTPaveTextTPaveStats :: TPaveStats -> GADTType TPaveText TPaveStats+    GADTTPaveTextTPavesText :: TPavesText -> GADTType TPaveText TPavesText+    GADTTPaveTextBottom  :: GADTType TPaveText BottomType+  data EGADTType TPaveText = forall a. EGADTTPaveText (GADTType TPaveText a)++castTPaveText :: Exist TPaveText -> IO (EGADTType TPaveText)+castTPaveText eobj = do +  let obj = TPaveText (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TPaveText" -> case obj of+        TPaveText fptr -> let obj' = TPaveText (castForeignPtr fptr :: ForeignPtr RawTPaveText)+                        in  return . EGADTTPaveText . GADTTPaveTextTPaveText $ obj'+    "TDiamond" -> case obj of+        TPaveText fptr -> let obj' = TDiamond (castForeignPtr fptr :: ForeignPtr RawTDiamond)+                        in  return . EGADTTPaveText . GADTTPaveTextTDiamond $ obj'+    "TPaveStats" -> case obj of+        TPaveText fptr -> let obj' = TPaveStats (castForeignPtr fptr :: ForeignPtr RawTPaveStats)+                        in  return . EGADTTPaveText . GADTTPaveTextTPaveStats $ obj'+    "TPavesText" -> case obj of+        TPaveText fptr -> let obj' = TPavesText (castForeignPtr fptr :: ForeignPtr RawTPavesText)+                        in  return . EGADTTPaveText . GADTTPaveTextTPavesText $ obj'+    _         -> return . EGADTTPaveText $ GADTTPaveTextBottom++++++instance GADTTypeable TPave where+  data GADTType TPave a where +    GADTTPaveTPave :: TPave -> GADTType TPave TPave+    GADTTPaveTPaveText :: TPaveText -> GADTType TPave TPaveText+    GADTTPaveTDiamond :: TDiamond -> GADTType TPave TDiamond+    GADTTPaveTPaveStats :: TPaveStats -> GADTType TPave TPaveStats+    GADTTPaveTPavesText :: TPavesText -> GADTType TPave TPavesText+    GADTTPaveTLegend :: TLegend -> GADTType TPave TLegend+    GADTTPaveTPaveLabel :: TPaveLabel -> GADTType TPave TPaveLabel+    GADTTPaveTPaveClass :: TPaveClass -> GADTType TPave TPaveClass+    GADTTPaveBottom  :: GADTType TPave BottomType+  data EGADTType TPave = forall a. EGADTTPave (GADTType TPave a)++castTPave :: Exist TPave -> IO (EGADTType TPave)+castTPave eobj = do +  let obj = TPave (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TPave" -> case obj of+        TPave fptr -> let obj' = TPave (castForeignPtr fptr :: ForeignPtr RawTPave)+                        in  return . EGADTTPave . GADTTPaveTPave $ obj'+    "TPaveText" -> case obj of+        TPave fptr -> let obj' = TPaveText (castForeignPtr fptr :: ForeignPtr RawTPaveText)+                        in  return . EGADTTPave . GADTTPaveTPaveText $ obj'+    "TDiamond" -> case obj of+        TPave fptr -> let obj' = TDiamond (castForeignPtr fptr :: ForeignPtr RawTDiamond)+                        in  return . EGADTTPave . GADTTPaveTDiamond $ obj'+    "TPaveStats" -> case obj of+        TPave fptr -> let obj' = TPaveStats (castForeignPtr fptr :: ForeignPtr RawTPaveStats)+                        in  return . EGADTTPave . GADTTPaveTPaveStats $ obj'+    "TPavesText" -> case obj of+        TPave fptr -> let obj' = TPavesText (castForeignPtr fptr :: ForeignPtr RawTPavesText)+                        in  return . EGADTTPave . GADTTPaveTPavesText $ obj'+    "TLegend" -> case obj of+        TPave fptr -> let obj' = TLegend (castForeignPtr fptr :: ForeignPtr RawTLegend)+                        in  return . EGADTTPave . GADTTPaveTLegend $ obj'+    "TPaveLabel" -> case obj of+        TPave fptr -> let obj' = TPaveLabel (castForeignPtr fptr :: ForeignPtr RawTPaveLabel)+                        in  return . EGADTTPave . GADTTPaveTPaveLabel $ obj'+    "TPaveClass" -> case obj of+        TPave fptr -> let obj' = TPaveClass (castForeignPtr fptr :: ForeignPtr RawTPaveClass)+                        in  return . EGADTTPave . GADTTPaveTPaveClass $ obj'+    _         -> return . EGADTTPave $ GADTTPaveBottom++++++instance GADTTypeable TBox where+  data GADTType TBox a where +    GADTTBoxTBox :: TBox -> GADTType TBox TBox+    GADTTBoxTPave :: TPave -> GADTType TBox TPave+    GADTTBoxTPaveText :: TPaveText -> GADTType TBox TPaveText+    GADTTBoxTDiamond :: TDiamond -> GADTType TBox TDiamond+    GADTTBoxTPaveStats :: TPaveStats -> GADTType TBox TPaveStats+    GADTTBoxTPavesText :: TPavesText -> GADTType TBox TPavesText+    GADTTBoxTLegend :: TLegend -> GADTType TBox TLegend+    GADTTBoxTPaveLabel :: TPaveLabel -> GADTType TBox TPaveLabel+    GADTTBoxTPaveClass :: TPaveClass -> GADTType TBox TPaveClass+    GADTTBoxTWbox :: TWbox -> GADTType TBox TWbox+    GADTTBoxTFrame :: TFrame -> GADTType TBox TFrame+    GADTTBoxTSliderBox :: TSliderBox -> GADTType TBox TSliderBox+    GADTTBoxBottom  :: GADTType TBox BottomType+  data EGADTType TBox = forall a. EGADTTBox (GADTType TBox a)++castTBox :: Exist TBox -> IO (EGADTType TBox)+castTBox eobj = do +  let obj = TBox (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TBox" -> case obj of+        TBox fptr -> let obj' = TBox (castForeignPtr fptr :: ForeignPtr RawTBox)+                        in  return . EGADTTBox . GADTTBoxTBox $ obj'+    "TPave" -> case obj of+        TBox fptr -> let obj' = TPave (castForeignPtr fptr :: ForeignPtr RawTPave)+                        in  return . EGADTTBox . GADTTBoxTPave $ obj'+    "TPaveText" -> case obj of+        TBox fptr -> let obj' = TPaveText (castForeignPtr fptr :: ForeignPtr RawTPaveText)+                        in  return . EGADTTBox . GADTTBoxTPaveText $ obj'+    "TDiamond" -> case obj of+        TBox fptr -> let obj' = TDiamond (castForeignPtr fptr :: ForeignPtr RawTDiamond)+                        in  return . EGADTTBox . GADTTBoxTDiamond $ obj'+    "TPaveStats" -> case obj of+        TBox fptr -> let obj' = TPaveStats (castForeignPtr fptr :: ForeignPtr RawTPaveStats)+                        in  return . EGADTTBox . GADTTBoxTPaveStats $ obj'+    "TPavesText" -> case obj of+        TBox fptr -> let obj' = TPavesText (castForeignPtr fptr :: ForeignPtr RawTPavesText)+                        in  return . EGADTTBox . GADTTBoxTPavesText $ obj'+    "TLegend" -> case obj of+        TBox fptr -> let obj' = TLegend (castForeignPtr fptr :: ForeignPtr RawTLegend)+                        in  return . EGADTTBox . GADTTBoxTLegend $ obj'+    "TPaveLabel" -> case obj of+        TBox fptr -> let obj' = TPaveLabel (castForeignPtr fptr :: ForeignPtr RawTPaveLabel)+                        in  return . EGADTTBox . GADTTBoxTPaveLabel $ obj'+    "TPaveClass" -> case obj of+        TBox fptr -> let obj' = TPaveClass (castForeignPtr fptr :: ForeignPtr RawTPaveClass)+                        in  return . EGADTTBox . GADTTBoxTPaveClass $ obj'+    "TWbox" -> case obj of+        TBox fptr -> let obj' = TWbox (castForeignPtr fptr :: ForeignPtr RawTWbox)+                        in  return . EGADTTBox . GADTTBoxTWbox $ obj'+    "TFrame" -> case obj of+        TBox fptr -> let obj' = TFrame (castForeignPtr fptr :: ForeignPtr RawTFrame)+                        in  return . EGADTTBox . GADTTBoxTFrame $ obj'+    "TSliderBox" -> case obj of+        TBox fptr -> let obj' = TSliderBox (castForeignPtr fptr :: ForeignPtr RawTSliderBox)+                        in  return . EGADTTBox . GADTTBoxTSliderBox $ obj'+    _         -> return . EGADTTBox $ GADTTBoxBottom++++++instance GADTTypeable TXTRU where+  data GADTType TXTRU a where +    GADTTXTRUTXTRU :: TXTRU -> GADTType TXTRU TXTRU+    GADTTXTRUBottom  :: GADTType TXTRU BottomType+  data EGADTType TXTRU = forall a. EGADTTXTRU (GADTType TXTRU a)++castTXTRU :: Exist TXTRU -> IO (EGADTType TXTRU)+castTXTRU eobj = do +  let obj = TXTRU (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TXTRU" -> case obj of+        TXTRU fptr -> let obj' = TXTRU (castForeignPtr fptr :: ForeignPtr RawTXTRU)+                        in  return . EGADTTXTRU . GADTTXTRUTXTRU $ obj'+    _         -> return . EGADTTXTRU $ GADTTXTRUBottom++++++instance GADTTypeable TSPHE where+  data GADTType TSPHE a where +    GADTTSPHETSPHE :: TSPHE -> GADTType TSPHE TSPHE+    GADTTSPHEBottom  :: GADTType TSPHE BottomType+  data EGADTType TSPHE = forall a. EGADTTSPHE (GADTType TSPHE a)++castTSPHE :: Exist TSPHE -> IO (EGADTType TSPHE)+castTSPHE eobj = do +  let obj = TSPHE (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TSPHE" -> case obj of+        TSPHE fptr -> let obj' = TSPHE (castForeignPtr fptr :: ForeignPtr RawTSPHE)+                        in  return . EGADTTSPHE . GADTTSPHETSPHE $ obj'+    _         -> return . EGADTTSPHE $ GADTTSPHEBottom++++++instance GADTTypeable TPCON where+  data GADTType TPCON a where +    GADTTPCONTPCON :: TPCON -> GADTType TPCON TPCON+    GADTTPCONBottom  :: GADTType TPCON BottomType+  data EGADTType TPCON = forall a. EGADTTPCON (GADTType TPCON a)++castTPCON :: Exist TPCON -> IO (EGADTType TPCON)+castTPCON eobj = do +  let obj = TPCON (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TPCON" -> case obj of+        TPCON fptr -> let obj' = TPCON (castForeignPtr fptr :: ForeignPtr RawTPCON)+                        in  return . EGADTTPCON . GADTTPCONTPCON $ obj'+    _         -> return . EGADTTPCON $ GADTTPCONBottom++++++instance GADTTypeable TTUBE where+  data GADTType TTUBE a where +    GADTTTUBETTUBE :: TTUBE -> GADTType TTUBE TTUBE+    GADTTTUBEBottom  :: GADTType TTUBE BottomType+  data EGADTType TTUBE = forall a. EGADTTTUBE (GADTType TTUBE a)++castTTUBE :: Exist TTUBE -> IO (EGADTType TTUBE)+castTTUBE eobj = do +  let obj = TTUBE (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TTUBE" -> case obj of+        TTUBE fptr -> let obj' = TTUBE (castForeignPtr fptr :: ForeignPtr RawTTUBE)+                        in  return . EGADTTTUBE . GADTTTUBETTUBE $ obj'+    _         -> return . EGADTTTUBE $ GADTTTUBEBottom++++++instance GADTTypeable TBRIK where+  data GADTType TBRIK a where +    GADTTBRIKTBRIK :: TBRIK -> GADTType TBRIK TBRIK+    GADTTBRIKBottom  :: GADTType TBRIK BottomType+  data EGADTType TBRIK = forall a. EGADTTBRIK (GADTType TBRIK a)++castTBRIK :: Exist TBRIK -> IO (EGADTType TBRIK)+castTBRIK eobj = do +  let obj = TBRIK (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TBRIK" -> case obj of+        TBRIK fptr -> let obj' = TBRIK (castForeignPtr fptr :: ForeignPtr RawTBRIK)+                        in  return . EGADTTBRIK . GADTTBRIKTBRIK $ obj'+    _         -> return . EGADTTBRIK $ GADTTBRIKBottom++++++instance GADTTypeable TShape where+  data GADTType TShape a where +    GADTTShapeTShape :: TShape -> GADTType TShape TShape+    GADTTShapeTBRIK :: TBRIK -> GADTType TShape TBRIK+    GADTTShapeTTUBE :: TTUBE -> GADTType TShape TTUBE+    GADTTShapeTPCON :: TPCON -> GADTType TShape TPCON+    GADTTShapeTSPHE :: TSPHE -> GADTType TShape TSPHE+    GADTTShapeTXTRU :: TXTRU -> GADTType TShape TXTRU+    GADTTShapeBottom  :: GADTType TShape BottomType+  data EGADTType TShape = forall a. EGADTTShape (GADTType TShape a)++castTShape :: Exist TShape -> IO (EGADTType TShape)+castTShape eobj = do +  let obj = TShape (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TShape" -> case obj of+        TShape fptr -> let obj' = TShape (castForeignPtr fptr :: ForeignPtr RawTShape)+                        in  return . EGADTTShape . GADTTShapeTShape $ obj'+    "TBRIK" -> case obj of+        TShape fptr -> let obj' = TBRIK (castForeignPtr fptr :: ForeignPtr RawTBRIK)+                        in  return . EGADTTShape . GADTTShapeTBRIK $ obj'+    "TTUBE" -> case obj of+        TShape fptr -> let obj' = TTUBE (castForeignPtr fptr :: ForeignPtr RawTTUBE)+                        in  return . EGADTTShape . GADTTShapeTTUBE $ obj'+    "TPCON" -> case obj of+        TShape fptr -> let obj' = TPCON (castForeignPtr fptr :: ForeignPtr RawTPCON)+                        in  return . EGADTTShape . GADTTShapeTPCON $ obj'+    "TSPHE" -> case obj of+        TShape fptr -> let obj' = TSPHE (castForeignPtr fptr :: ForeignPtr RawTSPHE)+                        in  return . EGADTTShape . GADTTShapeTSPHE $ obj'+    "TXTRU" -> case obj of+        TShape fptr -> let obj' = TXTRU (castForeignPtr fptr :: ForeignPtr RawTXTRU)+                        in  return . EGADTTShape . GADTTShapeTXTRU $ obj'+    _         -> return . EGADTTShape $ GADTTShapeBottom++++++instance GADTTypeable TGaxis where+  data GADTType TGaxis a where +    GADTTGaxisTGaxis :: TGaxis -> GADTType TGaxis TGaxis+    GADTTGaxisBottom  :: GADTType TGaxis BottomType+  data EGADTType TGaxis = forall a. EGADTTGaxis (GADTType TGaxis a)++castTGaxis :: Exist TGaxis -> IO (EGADTType TGaxis)+castTGaxis eobj = do +  let obj = TGaxis (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TGaxis" -> case obj of+        TGaxis fptr -> let obj' = TGaxis (castForeignPtr fptr :: ForeignPtr RawTGaxis)+                        in  return . EGADTTGaxis . GADTTGaxisTGaxis $ obj'+    _         -> return . EGADTTGaxis $ GADTTGaxisBottom++++++instance GADTTypeable TArrow where+  data GADTType TArrow a where +    GADTTArrowTArrow :: TArrow -> GADTType TArrow TArrow+    GADTTArrowBottom  :: GADTType TArrow BottomType+  data EGADTType TArrow = forall a. EGADTTArrow (GADTType TArrow a)++castTArrow :: Exist TArrow -> IO (EGADTType TArrow)+castTArrow eobj = do +  let obj = TArrow (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TArrow" -> case obj of+        TArrow fptr -> let obj' = TArrow (castForeignPtr fptr :: ForeignPtr RawTArrow)+                        in  return . EGADTTArrow . GADTTArrowTArrow $ obj'+    _         -> return . EGADTTArrow $ GADTTArrowBottom++++++instance GADTTypeable TLine where+  data GADTType TLine a where +    GADTTLineTLine :: TLine -> GADTType TLine TLine+    GADTTLineTArrow :: TArrow -> GADTType TLine TArrow+    GADTTLineTGaxis :: TGaxis -> GADTType TLine TGaxis+    GADTTLineBottom  :: GADTType TLine BottomType+  data EGADTType TLine = forall a. EGADTTLine (GADTType TLine a)++castTLine :: Exist TLine -> IO (EGADTType TLine)+castTLine eobj = do +  let obj = TLine (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TLine" -> case obj of+        TLine fptr -> let obj' = TLine (castForeignPtr fptr :: ForeignPtr RawTLine)+                        in  return . EGADTTLine . GADTTLineTLine $ obj'+    "TArrow" -> case obj of+        TLine fptr -> let obj' = TArrow (castForeignPtr fptr :: ForeignPtr RawTArrow)+                        in  return . EGADTTLine . GADTTLineTArrow $ obj'+    "TGaxis" -> case obj of+        TLine fptr -> let obj' = TGaxis (castForeignPtr fptr :: ForeignPtr RawTGaxis)+                        in  return . EGADTTLine . GADTTLineTGaxis $ obj'+    _         -> return . EGADTTLine $ GADTTLineBottom++++++instance GADTTypeable TCrown where+  data GADTType TCrown a where +    GADTTCrownTCrown :: TCrown -> GADTType TCrown TCrown+    GADTTCrownBottom  :: GADTType TCrown BottomType+  data EGADTType TCrown = forall a. EGADTTCrown (GADTType TCrown a)++castTCrown :: Exist TCrown -> IO (EGADTType TCrown)+castTCrown eobj = do +  let obj = TCrown (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TCrown" -> case obj of+        TCrown fptr -> let obj' = TCrown (castForeignPtr fptr :: ForeignPtr RawTCrown)+                        in  return . EGADTTCrown . GADTTCrownTCrown $ obj'+    _         -> return . EGADTTCrown $ GADTTCrownBottom++++++instance GADTTypeable TArc where+  data GADTType TArc a where +    GADTTArcTArc :: TArc -> GADTType TArc TArc+    GADTTArcBottom  :: GADTType TArc BottomType+  data EGADTType TArc = forall a. EGADTTArc (GADTType TArc a)++castTArc :: Exist TArc -> IO (EGADTType TArc)+castTArc eobj = do +  let obj = TArc (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TArc" -> case obj of+        TArc fptr -> let obj' = TArc (castForeignPtr fptr :: ForeignPtr RawTArc)+                        in  return . EGADTTArc . GADTTArcTArc $ obj'+    _         -> return . EGADTTArc $ GADTTArcBottom++++++instance GADTTypeable TEllipse where+  data GADTType TEllipse a where +    GADTTEllipseTEllipse :: TEllipse -> GADTType TEllipse TEllipse+    GADTTEllipseTArc :: TArc -> GADTType TEllipse TArc+    GADTTEllipseTCrown :: TCrown -> GADTType TEllipse TCrown+    GADTTEllipseBottom  :: GADTType TEllipse BottomType+  data EGADTType TEllipse = forall a. EGADTTEllipse (GADTType TEllipse a)++castTEllipse :: Exist TEllipse -> IO (EGADTType TEllipse)+castTEllipse eobj = do +  let obj = TEllipse (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TEllipse" -> case obj of+        TEllipse fptr -> let obj' = TEllipse (castForeignPtr fptr :: ForeignPtr RawTEllipse)+                        in  return . EGADTTEllipse . GADTTEllipseTEllipse $ obj'+    "TArc" -> case obj of+        TEllipse fptr -> let obj' = TArc (castForeignPtr fptr :: ForeignPtr RawTArc)+                        in  return . EGADTTEllipse . GADTTEllipseTArc $ obj'+    "TCrown" -> case obj of+        TEllipse fptr -> let obj' = TCrown (castForeignPtr fptr :: ForeignPtr RawTCrown)+                        in  return . EGADTTEllipse . GADTTEllipseTCrown $ obj'+    _         -> return . EGADTTEllipse $ GADTTEllipseBottom++++++instance GADTTypeable TGraphQQ where+  data GADTType TGraphQQ a where +    GADTTGraphQQTGraphQQ :: TGraphQQ -> GADTType TGraphQQ TGraphQQ+    GADTTGraphQQBottom  :: GADTType TGraphQQ BottomType+  data EGADTType TGraphQQ = forall a. EGADTTGraphQQ (GADTType TGraphQQ a)++castTGraphQQ :: Exist TGraphQQ -> IO (EGADTType TGraphQQ)+castTGraphQQ eobj = do +  let obj = TGraphQQ (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TGraphQQ" -> case obj of+        TGraphQQ fptr -> let obj' = TGraphQQ (castForeignPtr fptr :: ForeignPtr RawTGraphQQ)+                        in  return . EGADTTGraphQQ . GADTTGraphQQTGraphQQ $ obj'+    _         -> return . EGADTTGraphQQ $ GADTTGraphQQBottom++++++instance GADTTypeable TGraphPolar where+  data GADTType TGraphPolar a where +    GADTTGraphPolarTGraphPolar :: TGraphPolar -> GADTType TGraphPolar TGraphPolar+    GADTTGraphPolarBottom  :: GADTType TGraphPolar BottomType+  data EGADTType TGraphPolar = forall a. EGADTTGraphPolar (GADTType TGraphPolar a)++castTGraphPolar :: Exist TGraphPolar -> IO (EGADTType TGraphPolar)+castTGraphPolar eobj = do +  let obj = TGraphPolar (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TGraphPolar" -> case obj of+        TGraphPolar fptr -> let obj' = TGraphPolar (castForeignPtr fptr :: ForeignPtr RawTGraphPolar)+                        in  return . EGADTTGraphPolar . GADTTGraphPolarTGraphPolar $ obj'+    _         -> return . EGADTTGraphPolar $ GADTTGraphPolarBottom++++++instance GADTTypeable TGraphErrors where+  data GADTType TGraphErrors a where +    GADTTGraphErrorsTGraphErrors :: TGraphErrors -> GADTType TGraphErrors TGraphErrors+    GADTTGraphErrorsTGraphPolar :: TGraphPolar -> GADTType TGraphErrors TGraphPolar+    GADTTGraphErrorsBottom  :: GADTType TGraphErrors BottomType+  data EGADTType TGraphErrors = forall a. EGADTTGraphErrors (GADTType TGraphErrors a)++castTGraphErrors :: Exist TGraphErrors -> IO (EGADTType TGraphErrors)+castTGraphErrors eobj = do +  let obj = TGraphErrors (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TGraphErrors" -> case obj of+        TGraphErrors fptr -> let obj' = TGraphErrors (castForeignPtr fptr :: ForeignPtr RawTGraphErrors)+                        in  return . EGADTTGraphErrors . GADTTGraphErrorsTGraphErrors $ obj'+    "TGraphPolar" -> case obj of+        TGraphErrors fptr -> let obj' = TGraphPolar (castForeignPtr fptr :: ForeignPtr RawTGraphPolar)+                        in  return . EGADTTGraphErrors . GADTTGraphErrorsTGraphPolar $ obj'+    _         -> return . EGADTTGraphErrors $ GADTTGraphErrorsBottom++++++instance GADTTypeable TGraphBentErrors where+  data GADTType TGraphBentErrors a where +    GADTTGraphBentErrorsTGraphBentErrors :: TGraphBentErrors -> GADTType TGraphBentErrors TGraphBentErrors+    GADTTGraphBentErrorsBottom  :: GADTType TGraphBentErrors BottomType+  data EGADTType TGraphBentErrors = forall a. EGADTTGraphBentErrors (GADTType TGraphBentErrors a)++castTGraphBentErrors :: Exist TGraphBentErrors -> IO (EGADTType TGraphBentErrors)+castTGraphBentErrors eobj = do +  let obj = TGraphBentErrors (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TGraphBentErrors" -> case obj of+        TGraphBentErrors fptr -> let obj' = TGraphBentErrors (castForeignPtr fptr :: ForeignPtr RawTGraphBentErrors)+                        in  return . EGADTTGraphBentErrors . GADTTGraphBentErrorsTGraphBentErrors $ obj'+    _         -> return . EGADTTGraphBentErrors $ GADTTGraphBentErrorsBottom++++++instance GADTTypeable TCutG where+  data GADTType TCutG a where +    GADTTCutGTCutG :: TCutG -> GADTType TCutG TCutG+    GADTTCutGBottom  :: GADTType TCutG BottomType+  data EGADTType TCutG = forall a. EGADTTCutG (GADTType TCutG a)++castTCutG :: Exist TCutG -> IO (EGADTType TCutG)+castTCutG eobj = do +  let obj = TCutG (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TCutG" -> case obj of+        TCutG fptr -> let obj' = TCutG (castForeignPtr fptr :: ForeignPtr RawTCutG)+                        in  return . EGADTTCutG . GADTTCutGTCutG $ obj'+    _         -> return . EGADTTCutG $ GADTTCutGBottom++++++instance GADTTypeable TGraphAsymmErrors where+  data GADTType TGraphAsymmErrors a where +    GADTTGraphAsymmErrorsTGraphAsymmErrors :: TGraphAsymmErrors -> GADTType TGraphAsymmErrors TGraphAsymmErrors+    GADTTGraphAsymmErrorsBottom  :: GADTType TGraphAsymmErrors BottomType+  data EGADTType TGraphAsymmErrors = forall a. EGADTTGraphAsymmErrors (GADTType TGraphAsymmErrors a)++castTGraphAsymmErrors :: Exist TGraphAsymmErrors -> IO (EGADTType TGraphAsymmErrors)+castTGraphAsymmErrors eobj = do +  let obj = TGraphAsymmErrors (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TGraphAsymmErrors" -> case obj of+        TGraphAsymmErrors fptr -> let obj' = TGraphAsymmErrors (castForeignPtr fptr :: ForeignPtr RawTGraphAsymmErrors)+                        in  return . EGADTTGraphAsymmErrors . GADTTGraphAsymmErrorsTGraphAsymmErrors $ obj'+    _         -> return . EGADTTGraphAsymmErrors $ GADTTGraphAsymmErrorsBottom++++++instance GADTTypeable TGraph where+  data GADTType TGraph a where +    GADTTGraphTGraph :: TGraph -> GADTType TGraph TGraph+    GADTTGraphTGraphAsymmErrors :: TGraphAsymmErrors -> GADTType TGraph TGraphAsymmErrors+    GADTTGraphTCutG :: TCutG -> GADTType TGraph TCutG+    GADTTGraphTGraphBentErrors :: TGraphBentErrors -> GADTType TGraph TGraphBentErrors+    GADTTGraphTGraphErrors :: TGraphErrors -> GADTType TGraph TGraphErrors+    GADTTGraphTGraphPolar :: TGraphPolar -> GADTType TGraph TGraphPolar+    GADTTGraphTGraphQQ :: TGraphQQ -> GADTType TGraph TGraphQQ+    GADTTGraphBottom  :: GADTType TGraph BottomType+  data EGADTType TGraph = forall a. EGADTTGraph (GADTType TGraph a)++castTGraph :: Exist TGraph -> IO (EGADTType TGraph)+castTGraph eobj = do +  let obj = TGraph (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TGraph" -> case obj of+        TGraph fptr -> let obj' = TGraph (castForeignPtr fptr :: ForeignPtr RawTGraph)+                        in  return . EGADTTGraph . GADTTGraphTGraph $ obj'+    "TGraphAsymmErrors" -> case obj of+        TGraph fptr -> let obj' = TGraphAsymmErrors (castForeignPtr fptr :: ForeignPtr RawTGraphAsymmErrors)+                        in  return . EGADTTGraph . GADTTGraphTGraphAsymmErrors $ obj'+    "TCutG" -> case obj of+        TGraph fptr -> let obj' = TCutG (castForeignPtr fptr :: ForeignPtr RawTCutG)+                        in  return . EGADTTGraph . GADTTGraphTCutG $ obj'+    "TGraphBentErrors" -> case obj of+        TGraph fptr -> let obj' = TGraphBentErrors (castForeignPtr fptr :: ForeignPtr RawTGraphBentErrors)+                        in  return . EGADTTGraph . GADTTGraphTGraphBentErrors $ obj'+    "TGraphErrors" -> case obj of+        TGraph fptr -> let obj' = TGraphErrors (castForeignPtr fptr :: ForeignPtr RawTGraphErrors)+                        in  return . EGADTTGraph . GADTTGraphTGraphErrors $ obj'+    "TGraphPolar" -> case obj of+        TGraph fptr -> let obj' = TGraphPolar (castForeignPtr fptr :: ForeignPtr RawTGraphPolar)+                        in  return . EGADTTGraph . GADTTGraphTGraphPolar $ obj'+    "TGraphQQ" -> case obj of+        TGraph fptr -> let obj' = TGraphQQ (castForeignPtr fptr :: ForeignPtr RawTGraphQQ)+                        in  return . EGADTTGraph . GADTTGraphTGraphQQ $ obj'+    _         -> return . EGADTTGraph $ GADTTGraphBottom++++++instance GADTTypeable TF1 where+  data GADTType TF1 a where +    GADTTF1TF1 :: TF1 -> GADTType TF1 TF1+    GADTTF1Bottom  :: GADTType TF1 BottomType+  data EGADTType TF1 = forall a. EGADTTF1 (GADTType TF1 a)++castTF1 :: Exist TF1 -> IO (EGADTType TF1)+castTF1 eobj = do +  let obj = TF1 (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TF1" -> case obj of+        TF1 fptr -> let obj' = TF1 (castForeignPtr fptr :: ForeignPtr RawTF1)+                        in  return . EGADTTF1 . GADTTF1TF1 $ obj'+    _         -> return . EGADTTF1 $ GADTTF1Bottom++++++instance GADTTypeable THStack where+  data GADTType THStack a where +    GADTTHStackTHStack :: THStack -> GADTType THStack THStack+    GADTTHStackBottom  :: GADTType THStack BottomType+  data EGADTType THStack = forall a. EGADTTHStack (GADTType THStack a)++castTHStack :: Exist THStack -> IO (EGADTType THStack)+castTHStack eobj = do +  let obj = THStack (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "THStack" -> case obj of+        THStack fptr -> let obj' = THStack (castForeignPtr fptr :: ForeignPtr RawTHStack)+                        in  return . EGADTTHStack . GADTTHStackTHStack $ obj'+    _         -> return . EGADTTHStack $ GADTTHStackBottom++++++instance GADTTypeable TAttParticle where+  data GADTType TAttParticle a where +    GADTTAttParticleTAttParticle :: TAttParticle -> GADTType TAttParticle TAttParticle+    GADTTAttParticleBottom  :: GADTType TAttParticle BottomType+  data EGADTType TAttParticle = forall a. EGADTTAttParticle (GADTType TAttParticle a)++castTAttParticle :: Exist TAttParticle -> IO (EGADTType TAttParticle)+castTAttParticle eobj = do +  let obj = TAttParticle (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TAttParticle" -> case obj of+        TAttParticle fptr -> let obj' = TAttParticle (castForeignPtr fptr :: ForeignPtr RawTAttParticle)+                        in  return . EGADTTAttParticle . GADTTAttParticleTAttParticle $ obj'+    _         -> return . EGADTTAttParticle $ GADTTAttParticleBottom++++++instance GADTTypeable TFormula where+  data GADTType TFormula a where +    GADTTFormulaTFormula :: TFormula -> GADTType TFormula TFormula+    GADTTFormulaTF1 :: TF1 -> GADTType TFormula TF1+    GADTTFormulaBottom  :: GADTType TFormula BottomType+  data EGADTType TFormula = forall a. EGADTTFormula (GADTType TFormula a)++castTFormula :: Exist TFormula -> IO (EGADTType TFormula)+castTFormula eobj = do +  let obj = TFormula (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TFormula" -> case obj of+        TFormula fptr -> let obj' = TFormula (castForeignPtr fptr :: ForeignPtr RawTFormula)+                        in  return . EGADTTFormula . GADTTFormulaTFormula $ obj'+    "TF1" -> case obj of+        TFormula fptr -> let obj' = TF1 (castForeignPtr fptr :: ForeignPtr RawTF1)+                        in  return . EGADTTFormula . GADTTFormulaTF1 $ obj'+    _         -> return . EGADTTFormula $ GADTTFormulaBottom++++++instance GADTTypeable TClass where+  data GADTType TClass a where +    GADTTClassTClass :: TClass -> GADTType TClass TClass+    GADTTClassBottom  :: GADTType TClass BottomType+  data EGADTType TClass = forall a. EGADTTClass (GADTType TClass a)++castTClass :: Exist TClass -> IO (EGADTType TClass)+castTClass eobj = do +  let obj = TClass (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TClass" -> case obj of+        TClass fptr -> let obj' = TClass (castForeignPtr fptr :: ForeignPtr RawTClass)+                        in  return . EGADTTClass . GADTTClassTClass $ obj'+    _         -> return . EGADTTClass $ GADTTClassBottom++++++instance GADTTypeable TNamed where+  data GADTType TNamed a where +    GADTTNamedTNamed :: TNamed -> GADTType TNamed TNamed+    GADTTNamedTClass :: TClass -> GADTType TNamed TClass+    GADTTNamedTFormula :: TFormula -> GADTType TNamed TFormula+    GADTTNamedTAttParticle :: TAttParticle -> GADTType TNamed TAttParticle+    GADTTNamedTHStack :: THStack -> GADTType TNamed THStack+    GADTTNamedTF1 :: TF1 -> GADTType TNamed TF1+    GADTTNamedTGraph :: TGraph -> GADTType TNamed TGraph+    GADTTNamedTGraphAsymmErrors :: TGraphAsymmErrors -> GADTType TNamed TGraphAsymmErrors+    GADTTNamedTCutG :: TCutG -> GADTType TNamed TCutG+    GADTTNamedTGraphBentErrors :: TGraphBentErrors -> GADTType TNamed TGraphBentErrors+    GADTTNamedTGraphErrors :: TGraphErrors -> GADTType TNamed TGraphErrors+    GADTTNamedTGraphPolar :: TGraphPolar -> GADTType TNamed TGraphPolar+    GADTTNamedTGraphQQ :: TGraphQQ -> GADTType TNamed TGraphQQ+    GADTTNamedTShape :: TShape -> GADTType TNamed TShape+    GADTTNamedTBRIK :: TBRIK -> GADTType TNamed TBRIK+    GADTTNamedTTUBE :: TTUBE -> GADTType TNamed TTUBE+    GADTTNamedTPCON :: TPCON -> GADTType TNamed TPCON+    GADTTNamedTSPHE :: TSPHE -> GADTType TNamed TSPHE+    GADTTNamedTXTRU :: TXTRU -> GADTType TNamed TXTRU+    GADTTNamedTTree :: TTree -> GADTType TNamed TTree+    GADTTNamedTChain :: TChain -> GADTType TNamed TChain+    GADTTNamedTNtuple :: TNtuple -> GADTType TNamed TNtuple+    GADTTNamedTNtupleD :: TNtupleD -> GADTType TNamed TNtupleD+    GADTTNamedTTreeSQL :: TTreeSQL -> GADTType TNamed TTreeSQL+    GADTTNamedTEfficiency :: TEfficiency -> GADTType TNamed TEfficiency+    GADTTNamedTAxis :: TAxis -> GADTType TNamed TAxis+    GADTTNamedTLatex :: TLatex -> GADTType TNamed TLatex+    GADTTNamedTText :: TText -> GADTType TNamed TText+    GADTTNamedTDirectory :: TDirectory -> GADTType TNamed TDirectory+    GADTTNamedTDirectoryFile :: TDirectoryFile -> GADTType TNamed TDirectoryFile+    GADTTNamedTFile :: TFile -> GADTType TNamed TFile+    GADTTNamedTBranch :: TBranch -> GADTType TNamed TBranch+    GADTTNamedTH1 :: TH1 -> GADTType TNamed TH1+    GADTTNamedTH2 :: TH2 -> GADTType TNamed TH2+    GADTTNamedTH3 :: TH3 -> GADTType TNamed TH3+    GADTTNamedTH1C :: TH1C -> GADTType TNamed TH1C+    GADTTNamedTH1D :: TH1D -> GADTType TNamed TH1D+    GADTTNamedTH1F :: TH1F -> GADTType TNamed TH1F+    GADTTNamedTH1I :: TH1I -> GADTType TNamed TH1I+    GADTTNamedTH1S :: TH1S -> GADTType TNamed TH1S+    GADTTNamedTH2C :: TH2C -> GADTType TNamed TH2C+    GADTTNamedTH2D :: TH2D -> GADTType TNamed TH2D+    GADTTNamedTH2F :: TH2F -> GADTType TNamed TH2F+    GADTTNamedTH2I :: TH2I -> GADTType TNamed TH2I+    GADTTNamedTH2Poly :: TH2Poly -> GADTType TNamed TH2Poly+    GADTTNamedTH2S :: TH2S -> GADTType TNamed TH2S+    GADTTNamedTH3C :: TH3C -> GADTType TNamed TH3C+    GADTTNamedTH3D :: TH3D -> GADTType TNamed TH3D+    GADTTNamedTH3F :: TH3F -> GADTType TNamed TH3F+    GADTTNamedTH3I :: TH3I -> GADTType TNamed TH3I+    GADTTNamedTH3S :: TH3S -> GADTType TNamed TH3S+    GADTTNamedTRandom :: TRandom -> GADTType TNamed TRandom+    GADTTNamedBottom  :: GADTType TNamed BottomType+  data EGADTType TNamed = forall a. EGADTTNamed (GADTType TNamed a)++castTNamed :: Exist TNamed -> IO (EGADTType TNamed)+castTNamed eobj = do +  let obj = TNamed (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TNamed" -> case obj of+        TNamed fptr -> let obj' = TNamed (castForeignPtr fptr :: ForeignPtr RawTNamed)+                        in  return . EGADTTNamed . GADTTNamedTNamed $ obj'+    "TClass" -> case obj of+        TNamed fptr -> let obj' = TClass (castForeignPtr fptr :: ForeignPtr RawTClass)+                        in  return . EGADTTNamed . GADTTNamedTClass $ obj'+    "TFormula" -> case obj of+        TNamed fptr -> let obj' = TFormula (castForeignPtr fptr :: ForeignPtr RawTFormula)+                        in  return . EGADTTNamed . GADTTNamedTFormula $ obj'+    "TAttParticle" -> case obj of+        TNamed fptr -> let obj' = TAttParticle (castForeignPtr fptr :: ForeignPtr RawTAttParticle)+                        in  return . EGADTTNamed . GADTTNamedTAttParticle $ obj'+    "THStack" -> case obj of+        TNamed fptr -> let obj' = THStack (castForeignPtr fptr :: ForeignPtr RawTHStack)+                        in  return . EGADTTNamed . GADTTNamedTHStack $ obj'+    "TF1" -> case obj of+        TNamed fptr -> let obj' = TF1 (castForeignPtr fptr :: ForeignPtr RawTF1)+                        in  return . EGADTTNamed . GADTTNamedTF1 $ obj'+    "TGraph" -> case obj of+        TNamed fptr -> let obj' = TGraph (castForeignPtr fptr :: ForeignPtr RawTGraph)+                        in  return . EGADTTNamed . GADTTNamedTGraph $ obj'+    "TGraphAsymmErrors" -> case obj of+        TNamed fptr -> let obj' = TGraphAsymmErrors (castForeignPtr fptr :: ForeignPtr RawTGraphAsymmErrors)+                        in  return . EGADTTNamed . GADTTNamedTGraphAsymmErrors $ obj'+    "TCutG" -> case obj of+        TNamed fptr -> let obj' = TCutG (castForeignPtr fptr :: ForeignPtr RawTCutG)+                        in  return . EGADTTNamed . GADTTNamedTCutG $ obj'+    "TGraphBentErrors" -> case obj of+        TNamed fptr -> let obj' = TGraphBentErrors (castForeignPtr fptr :: ForeignPtr RawTGraphBentErrors)+                        in  return . EGADTTNamed . GADTTNamedTGraphBentErrors $ obj'+    "TGraphErrors" -> case obj of+        TNamed fptr -> let obj' = TGraphErrors (castForeignPtr fptr :: ForeignPtr RawTGraphErrors)+                        in  return . EGADTTNamed . GADTTNamedTGraphErrors $ obj'+    "TGraphPolar" -> case obj of+        TNamed fptr -> let obj' = TGraphPolar (castForeignPtr fptr :: ForeignPtr RawTGraphPolar)+                        in  return . EGADTTNamed . GADTTNamedTGraphPolar $ obj'+    "TGraphQQ" -> case obj of+        TNamed fptr -> let obj' = TGraphQQ (castForeignPtr fptr :: ForeignPtr RawTGraphQQ)+                        in  return . EGADTTNamed . GADTTNamedTGraphQQ $ obj'+    "TShape" -> case obj of+        TNamed fptr -> let obj' = TShape (castForeignPtr fptr :: ForeignPtr RawTShape)+                        in  return . EGADTTNamed . GADTTNamedTShape $ obj'+    "TBRIK" -> case obj of+        TNamed fptr -> let obj' = TBRIK (castForeignPtr fptr :: ForeignPtr RawTBRIK)+                        in  return . EGADTTNamed . GADTTNamedTBRIK $ obj'+    "TTUBE" -> case obj of+        TNamed fptr -> let obj' = TTUBE (castForeignPtr fptr :: ForeignPtr RawTTUBE)+                        in  return . EGADTTNamed . GADTTNamedTTUBE $ obj'+    "TPCON" -> case obj of+        TNamed fptr -> let obj' = TPCON (castForeignPtr fptr :: ForeignPtr RawTPCON)+                        in  return . EGADTTNamed . GADTTNamedTPCON $ obj'+    "TSPHE" -> case obj of+        TNamed fptr -> let obj' = TSPHE (castForeignPtr fptr :: ForeignPtr RawTSPHE)+                        in  return . EGADTTNamed . GADTTNamedTSPHE $ obj'+    "TXTRU" -> case obj of+        TNamed fptr -> let obj' = TXTRU (castForeignPtr fptr :: ForeignPtr RawTXTRU)+                        in  return . EGADTTNamed . GADTTNamedTXTRU $ obj'+    "TTree" -> case obj of+        TNamed fptr -> let obj' = TTree (castForeignPtr fptr :: ForeignPtr RawTTree)+                        in  return . EGADTTNamed . GADTTNamedTTree $ obj'+    "TChain" -> case obj of+        TNamed fptr -> let obj' = TChain (castForeignPtr fptr :: ForeignPtr RawTChain)+                        in  return . EGADTTNamed . GADTTNamedTChain $ obj'+    "TNtuple" -> case obj of+        TNamed fptr -> let obj' = TNtuple (castForeignPtr fptr :: ForeignPtr RawTNtuple)+                        in  return . EGADTTNamed . GADTTNamedTNtuple $ obj'+    "TNtupleD" -> case obj of+        TNamed fptr -> let obj' = TNtupleD (castForeignPtr fptr :: ForeignPtr RawTNtupleD)+                        in  return . EGADTTNamed . GADTTNamedTNtupleD $ obj'+    "TTreeSQL" -> case obj of+        TNamed fptr -> let obj' = TTreeSQL (castForeignPtr fptr :: ForeignPtr RawTTreeSQL)+                        in  return . EGADTTNamed . GADTTNamedTTreeSQL $ obj'+    "TEfficiency" -> case obj of+        TNamed fptr -> let obj' = TEfficiency (castForeignPtr fptr :: ForeignPtr RawTEfficiency)+                        in  return . EGADTTNamed . GADTTNamedTEfficiency $ obj'+    "TAxis" -> case obj of+        TNamed fptr -> let obj' = TAxis (castForeignPtr fptr :: ForeignPtr RawTAxis)+                        in  return . EGADTTNamed . GADTTNamedTAxis $ obj'+    "TLatex" -> case obj of+        TNamed fptr -> let obj' = TLatex (castForeignPtr fptr :: ForeignPtr RawTLatex)+                        in  return . EGADTTNamed . GADTTNamedTLatex $ obj'+    "TText" -> case obj of+        TNamed fptr -> let obj' = TText (castForeignPtr fptr :: ForeignPtr RawTText)+                        in  return . EGADTTNamed . GADTTNamedTText $ obj'+    "TDirectory" -> case obj of+        TNamed fptr -> let obj' = TDirectory (castForeignPtr fptr :: ForeignPtr RawTDirectory)+                        in  return . EGADTTNamed . GADTTNamedTDirectory $ obj'+    "TDirectoryFile" -> case obj of+        TNamed fptr -> let obj' = TDirectoryFile (castForeignPtr fptr :: ForeignPtr RawTDirectoryFile)+                        in  return . EGADTTNamed . GADTTNamedTDirectoryFile $ obj'+    "TFile" -> case obj of+        TNamed fptr -> let obj' = TFile (castForeignPtr fptr :: ForeignPtr RawTFile)+                        in  return . EGADTTNamed . GADTTNamedTFile $ obj'+    "TBranch" -> case obj of+        TNamed fptr -> let obj' = TBranch (castForeignPtr fptr :: ForeignPtr RawTBranch)+                        in  return . EGADTTNamed . GADTTNamedTBranch $ obj'+    "TH1" -> case obj of+        TNamed fptr -> let obj' = TH1 (castForeignPtr fptr :: ForeignPtr RawTH1)+                        in  return . EGADTTNamed . GADTTNamedTH1 $ obj'+    "TH2" -> case obj of+        TNamed fptr -> let obj' = TH2 (castForeignPtr fptr :: ForeignPtr RawTH2)+                        in  return . EGADTTNamed . GADTTNamedTH2 $ obj'+    "TH3" -> case obj of+        TNamed fptr -> let obj' = TH3 (castForeignPtr fptr :: ForeignPtr RawTH3)+                        in  return . EGADTTNamed . GADTTNamedTH3 $ obj'+    "TH1C" -> case obj of+        TNamed fptr -> let obj' = TH1C (castForeignPtr fptr :: ForeignPtr RawTH1C)+                        in  return . EGADTTNamed . GADTTNamedTH1C $ obj'+    "TH1D" -> case obj of+        TNamed fptr -> let obj' = TH1D (castForeignPtr fptr :: ForeignPtr RawTH1D)+                        in  return . EGADTTNamed . GADTTNamedTH1D $ obj'+    "TH1F" -> case obj of+        TNamed fptr -> let obj' = TH1F (castForeignPtr fptr :: ForeignPtr RawTH1F)+                        in  return . EGADTTNamed . GADTTNamedTH1F $ obj'+    "TH1I" -> case obj of+        TNamed fptr -> let obj' = TH1I (castForeignPtr fptr :: ForeignPtr RawTH1I)+                        in  return . EGADTTNamed . GADTTNamedTH1I $ obj'+    "TH1S" -> case obj of+        TNamed fptr -> let obj' = TH1S (castForeignPtr fptr :: ForeignPtr RawTH1S)+                        in  return . EGADTTNamed . GADTTNamedTH1S $ obj'+    "TH2C" -> case obj of+        TNamed fptr -> let obj' = TH2C (castForeignPtr fptr :: ForeignPtr RawTH2C)+                        in  return . EGADTTNamed . GADTTNamedTH2C $ obj'+    "TH2D" -> case obj of+        TNamed fptr -> let obj' = TH2D (castForeignPtr fptr :: ForeignPtr RawTH2D)+                        in  return . EGADTTNamed . GADTTNamedTH2D $ obj'+    "TH2F" -> case obj of+        TNamed fptr -> let obj' = TH2F (castForeignPtr fptr :: ForeignPtr RawTH2F)+                        in  return . EGADTTNamed . GADTTNamedTH2F $ obj'+    "TH2I" -> case obj of+        TNamed fptr -> let obj' = TH2I (castForeignPtr fptr :: ForeignPtr RawTH2I)+                        in  return . EGADTTNamed . GADTTNamedTH2I $ obj'+    "TH2Poly" -> case obj of+        TNamed fptr -> let obj' = TH2Poly (castForeignPtr fptr :: ForeignPtr RawTH2Poly)+                        in  return . EGADTTNamed . GADTTNamedTH2Poly $ obj'+    "TH2S" -> case obj of+        TNamed fptr -> let obj' = TH2S (castForeignPtr fptr :: ForeignPtr RawTH2S)+                        in  return . EGADTTNamed . GADTTNamedTH2S $ obj'+    "TH3C" -> case obj of+        TNamed fptr -> let obj' = TH3C (castForeignPtr fptr :: ForeignPtr RawTH3C)+                        in  return . EGADTTNamed . GADTTNamedTH3C $ obj'+    "TH3D" -> case obj of+        TNamed fptr -> let obj' = TH3D (castForeignPtr fptr :: ForeignPtr RawTH3D)+                        in  return . EGADTTNamed . GADTTNamedTH3D $ obj'+    "TH3F" -> case obj of+        TNamed fptr -> let obj' = TH3F (castForeignPtr fptr :: ForeignPtr RawTH3F)+                        in  return . EGADTTNamed . GADTTNamedTH3F $ obj'+    "TH3I" -> case obj of+        TNamed fptr -> let obj' = TH3I (castForeignPtr fptr :: ForeignPtr RawTH3I)+                        in  return . EGADTTNamed . GADTTNamedTH3I $ obj'+    "TH3S" -> case obj of+        TNamed fptr -> let obj' = TH3S (castForeignPtr fptr :: ForeignPtr RawTH3S)+                        in  return . EGADTTNamed . GADTTNamedTH3S $ obj'+    "TRandom" -> case obj of+        TNamed fptr -> let obj' = TRandom (castForeignPtr fptr :: ForeignPtr RawTRandom)+                        in  return . EGADTTNamed . GADTTNamedTRandom $ obj'+    _         -> return . EGADTTNamed $ GADTTNamedBottom++++++instance GADTTypeable TObject where+  data GADTType TObject a where +    GADTTObjectTObject :: TObject -> GADTType TObject TObject+    GADTTObjectTNamed :: TNamed -> GADTType TObject TNamed+    GADTTObjectTClass :: TClass -> GADTType TObject TClass+    GADTTObjectTFormula :: TFormula -> GADTType TObject TFormula+    GADTTObjectTAttParticle :: TAttParticle -> GADTType TObject TAttParticle+    GADTTObjectTHStack :: THStack -> GADTType TObject THStack+    GADTTObjectTF1 :: TF1 -> GADTType TObject TF1+    GADTTObjectTGraph :: TGraph -> GADTType TObject TGraph+    GADTTObjectTGraphAsymmErrors :: TGraphAsymmErrors -> GADTType TObject TGraphAsymmErrors+    GADTTObjectTCutG :: TCutG -> GADTType TObject TCutG+    GADTTObjectTGraphBentErrors :: TGraphBentErrors -> GADTType TObject TGraphBentErrors+    GADTTObjectTGraphErrors :: TGraphErrors -> GADTType TObject TGraphErrors+    GADTTObjectTGraphPolar :: TGraphPolar -> GADTType TObject TGraphPolar+    GADTTObjectTGraphQQ :: TGraphQQ -> GADTType TObject TGraphQQ+    GADTTObjectTEllipse :: TEllipse -> GADTType TObject TEllipse+    GADTTObjectTArc :: TArc -> GADTType TObject TArc+    GADTTObjectTCrown :: TCrown -> GADTType TObject TCrown+    GADTTObjectTLine :: TLine -> GADTType TObject TLine+    GADTTObjectTArrow :: TArrow -> GADTType TObject TArrow+    GADTTObjectTGaxis :: TGaxis -> GADTType TObject TGaxis+    GADTTObjectTShape :: TShape -> GADTType TObject TShape+    GADTTObjectTBRIK :: TBRIK -> GADTType TObject TBRIK+    GADTTObjectTTUBE :: TTUBE -> GADTType TObject TTUBE+    GADTTObjectTPCON :: TPCON -> GADTType TObject TPCON+    GADTTObjectTSPHE :: TSPHE -> GADTType TObject TSPHE+    GADTTObjectTXTRU :: TXTRU -> GADTType TObject TXTRU+    GADTTObjectTBox :: TBox -> GADTType TObject TBox+    GADTTObjectTPave :: TPave -> GADTType TObject TPave+    GADTTObjectTPaveText :: TPaveText -> GADTType TObject TPaveText+    GADTTObjectTDiamond :: TDiamond -> GADTType TObject TDiamond+    GADTTObjectTPaveStats :: TPaveStats -> GADTType TObject TPaveStats+    GADTTObjectTPavesText :: TPavesText -> GADTType TObject TPavesText+    GADTTObjectTLegend :: TLegend -> GADTType TObject TLegend+    GADTTObjectTPaveLabel :: TPaveLabel -> GADTType TObject TPaveLabel+    GADTTObjectTPaveClass :: TPaveClass -> GADTType TObject TPaveClass+    GADTTObjectTWbox :: TWbox -> GADTType TObject TWbox+    GADTTObjectTFrame :: TFrame -> GADTType TObject TFrame+    GADTTObjectTSliderBox :: TSliderBox -> GADTType TObject TSliderBox+    GADTTObjectTTree :: TTree -> GADTType TObject TTree+    GADTTObjectTChain :: TChain -> GADTType TObject TChain+    GADTTObjectTNtuple :: TNtuple -> GADTType TObject TNtuple+    GADTTObjectTNtupleD :: TNtupleD -> GADTType TObject TNtupleD+    GADTTObjectTTreeSQL :: TTreeSQL -> GADTType TObject TTreeSQL+    GADTTObjectTPolyLine :: TPolyLine -> GADTType TObject TPolyLine+    GADTTObjectTCurlyLine :: TCurlyLine -> GADTType TObject TCurlyLine+    GADTTObjectTCurlyArc :: TCurlyArc -> GADTType TObject TCurlyArc+    GADTTObjectTEfficiency :: TEfficiency -> GADTType TObject TEfficiency+    GADTTObjectTAxis :: TAxis -> GADTType TObject TAxis+    GADTTObjectTLatex :: TLatex -> GADTType TObject TLatex+    GADTTObjectTText :: TText -> GADTType TObject TText+    GADTTObjectTDirectory :: TDirectory -> GADTType TObject TDirectory+    GADTTObjectTDirectoryFile :: TDirectoryFile -> GADTType TObject TDirectoryFile+    GADTTObjectTFile :: TFile -> GADTType TObject TFile+    GADTTObjectTBranch :: TBranch -> GADTType TObject TBranch+    GADTTObjectTVirtualTreePlayer :: TVirtualTreePlayer -> GADTType TObject TVirtualTreePlayer+    GADTTObjectTTreePlayer :: TTreePlayer -> GADTType TObject TTreePlayer+    GADTTObjectTH1 :: TH1 -> GADTType TObject TH1+    GADTTObjectTH2 :: TH2 -> GADTType TObject TH2+    GADTTObjectTH3 :: TH3 -> GADTType TObject TH3+    GADTTObjectTH1C :: TH1C -> GADTType TObject TH1C+    GADTTObjectTH1D :: TH1D -> GADTType TObject TH1D+    GADTTObjectTH1F :: TH1F -> GADTType TObject TH1F+    GADTTObjectTH1I :: TH1I -> GADTType TObject TH1I+    GADTTObjectTH1S :: TH1S -> GADTType TObject TH1S+    GADTTObjectTH2C :: TH2C -> GADTType TObject TH2C+    GADTTObjectTH2D :: TH2D -> GADTType TObject TH2D+    GADTTObjectTH2F :: TH2F -> GADTType TObject TH2F+    GADTTObjectTH2I :: TH2I -> GADTType TObject TH2I+    GADTTObjectTH2Poly :: TH2Poly -> GADTType TObject TH2Poly+    GADTTObjectTH2S :: TH2S -> GADTType TObject TH2S+    GADTTObjectTH3C :: TH3C -> GADTType TObject TH3C+    GADTTObjectTH3D :: TH3D -> GADTType TObject TH3D+    GADTTObjectTH3F :: TH3F -> GADTType TObject TH3F+    GADTTObjectTH3I :: TH3I -> GADTType TObject TH3I+    GADTTObjectTH3S :: TH3S -> GADTType TObject TH3S+    GADTTObjectTVirtualPad :: TVirtualPad -> GADTType TObject TVirtualPad+    GADTTObjectTPad :: TPad -> GADTType TObject TPad+    GADTTObjectTButton :: TButton -> GADTType TObject TButton+    GADTTObjectTGroupButton :: TGroupButton -> GADTType TObject TGroupButton+    GADTTObjectTCanvas :: TCanvas -> GADTType TObject TCanvas+    GADTTObjectTDialogCanvas :: TDialogCanvas -> GADTType TObject TDialogCanvas+    GADTTObjectTInspectCanvas :: TInspectCanvas -> GADTType TObject TInspectCanvas+    GADTTObjectTEvePad :: TEvePad -> GADTType TObject TEvePad+    GADTTObjectTSlider :: TSlider -> GADTType TObject TSlider+    GADTTObjectTApplication :: TApplication -> GADTType TObject TApplication+    GADTTObjectTRint :: TRint -> GADTType TObject TRint+    GADTTObjectTRandom :: TRandom -> GADTType TObject TRandom+    GADTTObjectBottom  :: GADTType TObject BottomType+  data EGADTType TObject = forall a. EGADTTObject (GADTType TObject a)++castTObject :: Exist TObject -> IO (EGADTType TObject)+castTObject eobj = do +  let obj = TObject (get_fptr eobj)+  etclass <- isA obj  +  cname <- case etclass of +             ETClass tclass -> getName tclass+  case cname of +    "TObject" -> case obj of+        TObject fptr -> let obj' = TObject (castForeignPtr fptr :: ForeignPtr RawTObject)+                        in  return . EGADTTObject . GADTTObjectTObject $ obj'+    "TNamed" -> case obj of+        TObject fptr -> let obj' = TNamed (castForeignPtr fptr :: ForeignPtr RawTNamed)+                        in  return . EGADTTObject . GADTTObjectTNamed $ obj'+    "TClass" -> case obj of+        TObject fptr -> let obj' = TClass (castForeignPtr fptr :: ForeignPtr RawTClass)+                        in  return . EGADTTObject . GADTTObjectTClass $ obj'+    "TFormula" -> case obj of+        TObject fptr -> let obj' = TFormula (castForeignPtr fptr :: ForeignPtr RawTFormula)+                        in  return . EGADTTObject . GADTTObjectTFormula $ obj'+    "TAttParticle" -> case obj of+        TObject fptr -> let obj' = TAttParticle (castForeignPtr fptr :: ForeignPtr RawTAttParticle)+                        in  return . EGADTTObject . GADTTObjectTAttParticle $ obj'+    "THStack" -> case obj of+        TObject fptr -> let obj' = THStack (castForeignPtr fptr :: ForeignPtr RawTHStack)+                        in  return . EGADTTObject . GADTTObjectTHStack $ obj'+    "TF1" -> case obj of+        TObject fptr -> let obj' = TF1 (castForeignPtr fptr :: ForeignPtr RawTF1)+                        in  return . EGADTTObject . GADTTObjectTF1 $ obj'+    "TGraph" -> case obj of+        TObject fptr -> let obj' = TGraph (castForeignPtr fptr :: ForeignPtr RawTGraph)+                        in  return . EGADTTObject . GADTTObjectTGraph $ obj'+    "TGraphAsymmErrors" -> case obj of+        TObject fptr -> let obj' = TGraphAsymmErrors (castForeignPtr fptr :: ForeignPtr RawTGraphAsymmErrors)+                        in  return . EGADTTObject . GADTTObjectTGraphAsymmErrors $ obj'+    "TCutG" -> case obj of+        TObject fptr -> let obj' = TCutG (castForeignPtr fptr :: ForeignPtr RawTCutG)+                        in  return . EGADTTObject . GADTTObjectTCutG $ obj'+    "TGraphBentErrors" -> case obj of+        TObject fptr -> let obj' = TGraphBentErrors (castForeignPtr fptr :: ForeignPtr RawTGraphBentErrors)+                        in  return . EGADTTObject . GADTTObjectTGraphBentErrors $ obj'+    "TGraphErrors" -> case obj of+        TObject fptr -> let obj' = TGraphErrors (castForeignPtr fptr :: ForeignPtr RawTGraphErrors)+                        in  return . EGADTTObject . GADTTObjectTGraphErrors $ obj'+    "TGraphPolar" -> case obj of+        TObject fptr -> let obj' = TGraphPolar (castForeignPtr fptr :: ForeignPtr RawTGraphPolar)+                        in  return . EGADTTObject . GADTTObjectTGraphPolar $ obj'+    "TGraphQQ" -> case obj of+        TObject fptr -> let obj' = TGraphQQ (castForeignPtr fptr :: ForeignPtr RawTGraphQQ)+                        in  return . EGADTTObject . GADTTObjectTGraphQQ $ obj'+    "TEllipse" -> case obj of+        TObject fptr -> let obj' = TEllipse (castForeignPtr fptr :: ForeignPtr RawTEllipse)+                        in  return . EGADTTObject . GADTTObjectTEllipse $ obj'+    "TArc" -> case obj of+        TObject fptr -> let obj' = TArc (castForeignPtr fptr :: ForeignPtr RawTArc)+                        in  return . EGADTTObject . GADTTObjectTArc $ obj'+    "TCrown" -> case obj of+        TObject fptr -> let obj' = TCrown (castForeignPtr fptr :: ForeignPtr RawTCrown)+                        in  return . EGADTTObject . GADTTObjectTCrown $ obj'+    "TLine" -> case obj of+        TObject fptr -> let obj' = TLine (castForeignPtr fptr :: ForeignPtr RawTLine)+                        in  return . EGADTTObject . GADTTObjectTLine $ obj'+    "TArrow" -> case obj of+        TObject fptr -> let obj' = TArrow (castForeignPtr fptr :: ForeignPtr RawTArrow)+                        in  return . EGADTTObject . GADTTObjectTArrow $ obj'+    "TGaxis" -> case obj of+        TObject fptr -> let obj' = TGaxis (castForeignPtr fptr :: ForeignPtr RawTGaxis)+                        in  return . EGADTTObject . GADTTObjectTGaxis $ obj'+    "TShape" -> case obj of+        TObject fptr -> let obj' = TShape (castForeignPtr fptr :: ForeignPtr RawTShape)+                        in  return . EGADTTObject . GADTTObjectTShape $ obj'+    "TBRIK" -> case obj of+        TObject fptr -> let obj' = TBRIK (castForeignPtr fptr :: ForeignPtr RawTBRIK)+                        in  return . EGADTTObject . GADTTObjectTBRIK $ obj'+    "TTUBE" -> case obj of+        TObject fptr -> let obj' = TTUBE (castForeignPtr fptr :: ForeignPtr RawTTUBE)+                        in  return . EGADTTObject . GADTTObjectTTUBE $ obj'+    "TPCON" -> case obj of+        TObject fptr -> let obj' = TPCON (castForeignPtr fptr :: ForeignPtr RawTPCON)+                        in  return . EGADTTObject . GADTTObjectTPCON $ obj'+    "TSPHE" -> case obj of+        TObject fptr -> let obj' = TSPHE (castForeignPtr fptr :: ForeignPtr RawTSPHE)+                        in  return . EGADTTObject . GADTTObjectTSPHE $ obj'+    "TXTRU" -> case obj of+        TObject fptr -> let obj' = TXTRU (castForeignPtr fptr :: ForeignPtr RawTXTRU)+                        in  return . EGADTTObject . GADTTObjectTXTRU $ obj'+    "TBox" -> case obj of+        TObject fptr -> let obj' = TBox (castForeignPtr fptr :: ForeignPtr RawTBox)+                        in  return . EGADTTObject . GADTTObjectTBox $ obj'+    "TPave" -> case obj of+        TObject fptr -> let obj' = TPave (castForeignPtr fptr :: ForeignPtr RawTPave)+                        in  return . EGADTTObject . GADTTObjectTPave $ obj'+    "TPaveText" -> case obj of+        TObject fptr -> let obj' = TPaveText (castForeignPtr fptr :: ForeignPtr RawTPaveText)+                        in  return . EGADTTObject . GADTTObjectTPaveText $ obj'+    "TDiamond" -> case obj of+        TObject fptr -> let obj' = TDiamond (castForeignPtr fptr :: ForeignPtr RawTDiamond)+                        in  return . EGADTTObject . GADTTObjectTDiamond $ obj'+    "TPaveStats" -> case obj of+        TObject fptr -> let obj' = TPaveStats (castForeignPtr fptr :: ForeignPtr RawTPaveStats)+                        in  return . EGADTTObject . GADTTObjectTPaveStats $ obj'+    "TPavesText" -> case obj of+        TObject fptr -> let obj' = TPavesText (castForeignPtr fptr :: ForeignPtr RawTPavesText)+                        in  return . EGADTTObject . GADTTObjectTPavesText $ obj'+    "TLegend" -> case obj of+        TObject fptr -> let obj' = TLegend (castForeignPtr fptr :: ForeignPtr RawTLegend)+                        in  return . EGADTTObject . GADTTObjectTLegend $ obj'+    "TPaveLabel" -> case obj of+        TObject fptr -> let obj' = TPaveLabel (castForeignPtr fptr :: ForeignPtr RawTPaveLabel)+                        in  return . EGADTTObject . GADTTObjectTPaveLabel $ obj'+    "TPaveClass" -> case obj of+        TObject fptr -> let obj' = TPaveClass (castForeignPtr fptr :: ForeignPtr RawTPaveClass)+                        in  return . EGADTTObject . GADTTObjectTPaveClass $ obj'+    "TWbox" -> case obj of+        TObject fptr -> let obj' = TWbox (castForeignPtr fptr :: ForeignPtr RawTWbox)+                        in  return . EGADTTObject . GADTTObjectTWbox $ obj'+    "TFrame" -> case obj of+        TObject fptr -> let obj' = TFrame (castForeignPtr fptr :: ForeignPtr RawTFrame)+                        in  return . EGADTTObject . GADTTObjectTFrame $ obj'+    "TSliderBox" -> case obj of+        TObject fptr -> let obj' = TSliderBox (castForeignPtr fptr :: ForeignPtr RawTSliderBox)+                        in  return . EGADTTObject . GADTTObjectTSliderBox $ obj'+    "TTree" -> case obj of+        TObject fptr -> let obj' = TTree (castForeignPtr fptr :: ForeignPtr RawTTree)+                        in  return . EGADTTObject . GADTTObjectTTree $ obj'+    "TChain" -> case obj of+        TObject fptr -> let obj' = TChain (castForeignPtr fptr :: ForeignPtr RawTChain)+                        in  return . EGADTTObject . GADTTObjectTChain $ obj'+    "TNtuple" -> case obj of+        TObject fptr -> let obj' = TNtuple (castForeignPtr fptr :: ForeignPtr RawTNtuple)+                        in  return . EGADTTObject . GADTTObjectTNtuple $ obj'+    "TNtupleD" -> case obj of+        TObject fptr -> let obj' = TNtupleD (castForeignPtr fptr :: ForeignPtr RawTNtupleD)+                        in  return . EGADTTObject . GADTTObjectTNtupleD $ obj'+    "TTreeSQL" -> case obj of+        TObject fptr -> let obj' = TTreeSQL (castForeignPtr fptr :: ForeignPtr RawTTreeSQL)+                        in  return . EGADTTObject . GADTTObjectTTreeSQL $ obj'+    "TPolyLine" -> case obj of+        TObject fptr -> let obj' = TPolyLine (castForeignPtr fptr :: ForeignPtr RawTPolyLine)+                        in  return . EGADTTObject . GADTTObjectTPolyLine $ obj'+    "TCurlyLine" -> case obj of+        TObject fptr -> let obj' = TCurlyLine (castForeignPtr fptr :: ForeignPtr RawTCurlyLine)+                        in  return . EGADTTObject . GADTTObjectTCurlyLine $ obj'+    "TCurlyArc" -> case obj of+        TObject fptr -> let obj' = TCurlyArc (castForeignPtr fptr :: ForeignPtr RawTCurlyArc)+                        in  return . EGADTTObject . GADTTObjectTCurlyArc $ obj'+    "TEfficiency" -> case obj of+        TObject fptr -> let obj' = TEfficiency (castForeignPtr fptr :: ForeignPtr RawTEfficiency)+                        in  return . EGADTTObject . GADTTObjectTEfficiency $ obj'+    "TAxis" -> case obj of+        TObject fptr -> let obj' = TAxis (castForeignPtr fptr :: ForeignPtr RawTAxis)+                        in  return . EGADTTObject . GADTTObjectTAxis $ obj'+    "TLatex" -> case obj of+        TObject fptr -> let obj' = TLatex (castForeignPtr fptr :: ForeignPtr RawTLatex)+                        in  return . EGADTTObject . GADTTObjectTLatex $ obj'+    "TText" -> case obj of+        TObject fptr -> let obj' = TText (castForeignPtr fptr :: ForeignPtr RawTText)+                        in  return . EGADTTObject . GADTTObjectTText $ obj'+    "TDirectory" -> case obj of+        TObject fptr -> let obj' = TDirectory (castForeignPtr fptr :: ForeignPtr RawTDirectory)+                        in  return . EGADTTObject . GADTTObjectTDirectory $ obj'+    "TDirectoryFile" -> case obj of+        TObject fptr -> let obj' = TDirectoryFile (castForeignPtr fptr :: ForeignPtr RawTDirectoryFile)+                        in  return . EGADTTObject . GADTTObjectTDirectoryFile $ obj'+    "TFile" -> case obj of+        TObject fptr -> let obj' = TFile (castForeignPtr fptr :: ForeignPtr RawTFile)+                        in  return . EGADTTObject . GADTTObjectTFile $ obj'+    "TBranch" -> case obj of+        TObject fptr -> let obj' = TBranch (castForeignPtr fptr :: ForeignPtr RawTBranch)+                        in  return . EGADTTObject . GADTTObjectTBranch $ obj'+    "TVirtualTreePlayer" -> case obj of+        TObject fptr -> let obj' = TVirtualTreePlayer (castForeignPtr fptr :: ForeignPtr RawTVirtualTreePlayer)+                        in  return . EGADTTObject . GADTTObjectTVirtualTreePlayer $ obj'+    "TTreePlayer" -> case obj of+        TObject fptr -> let obj' = TTreePlayer (castForeignPtr fptr :: ForeignPtr RawTTreePlayer)+                        in  return . EGADTTObject . GADTTObjectTTreePlayer $ obj'+    "TH1" -> case obj of+        TObject fptr -> let obj' = TH1 (castForeignPtr fptr :: ForeignPtr RawTH1)+                        in  return . EGADTTObject . GADTTObjectTH1 $ obj'+    "TH2" -> case obj of+        TObject fptr -> let obj' = TH2 (castForeignPtr fptr :: ForeignPtr RawTH2)+                        in  return . EGADTTObject . GADTTObjectTH2 $ obj'+    "TH3" -> case obj of+        TObject fptr -> let obj' = TH3 (castForeignPtr fptr :: ForeignPtr RawTH3)+                        in  return . EGADTTObject . GADTTObjectTH3 $ obj'+    "TH1C" -> case obj of+        TObject fptr -> let obj' = TH1C (castForeignPtr fptr :: ForeignPtr RawTH1C)+                        in  return . EGADTTObject . GADTTObjectTH1C $ obj'+    "TH1D" -> case obj of+        TObject fptr -> let obj' = TH1D (castForeignPtr fptr :: ForeignPtr RawTH1D)+                        in  return . EGADTTObject . GADTTObjectTH1D $ obj'+    "TH1F" -> case obj of+        TObject fptr -> let obj' = TH1F (castForeignPtr fptr :: ForeignPtr RawTH1F)+                        in  return . EGADTTObject . GADTTObjectTH1F $ obj'+    "TH1I" -> case obj of+        TObject fptr -> let obj' = TH1I (castForeignPtr fptr :: ForeignPtr RawTH1I)+                        in  return . EGADTTObject . GADTTObjectTH1I $ obj'+    "TH1S" -> case obj of+        TObject fptr -> let obj' = TH1S (castForeignPtr fptr :: ForeignPtr RawTH1S)+                        in  return . EGADTTObject . GADTTObjectTH1S $ obj'+    "TH2C" -> case obj of+        TObject fptr -> let obj' = TH2C (castForeignPtr fptr :: ForeignPtr RawTH2C)+                        in  return . EGADTTObject . GADTTObjectTH2C $ obj'+    "TH2D" -> case obj of+        TObject fptr -> let obj' = TH2D (castForeignPtr fptr :: ForeignPtr RawTH2D)+                        in  return . EGADTTObject . GADTTObjectTH2D $ obj'+    "TH2F" -> case obj of+        TObject fptr -> let obj' = TH2F (castForeignPtr fptr :: ForeignPtr RawTH2F)+                        in  return . EGADTTObject . GADTTObjectTH2F $ obj'+    "TH2I" -> case obj of+        TObject fptr -> let obj' = TH2I (castForeignPtr fptr :: ForeignPtr RawTH2I)+                        in  return . EGADTTObject . GADTTObjectTH2I $ obj'+    "TH2Poly" -> case obj of+        TObject fptr -> let obj' = TH2Poly (castForeignPtr fptr :: ForeignPtr RawTH2Poly)+                        in  return . EGADTTObject . GADTTObjectTH2Poly $ obj'+    "TH2S" -> case obj of+        TObject fptr -> let obj' = TH2S (castForeignPtr fptr :: ForeignPtr RawTH2S)+                        in  return . EGADTTObject . GADTTObjectTH2S $ obj'+    "TH3C" -> case obj of+        TObject fptr -> let obj' = TH3C (castForeignPtr fptr :: ForeignPtr RawTH3C)+                        in  return . EGADTTObject . GADTTObjectTH3C $ obj'+    "TH3D" -> case obj of+        TObject fptr -> let obj' = TH3D (castForeignPtr fptr :: ForeignPtr RawTH3D)+                        in  return . EGADTTObject . GADTTObjectTH3D $ obj'+    "TH3F" -> case obj of+        TObject fptr -> let obj' = TH3F (castForeignPtr fptr :: ForeignPtr RawTH3F)+                        in  return . EGADTTObject . GADTTObjectTH3F $ obj'+    "TH3I" -> case obj of+        TObject fptr -> let obj' = TH3I (castForeignPtr fptr :: ForeignPtr RawTH3I)+                        in  return . EGADTTObject . GADTTObjectTH3I $ obj'+    "TH3S" -> case obj of+        TObject fptr -> let obj' = TH3S (castForeignPtr fptr :: ForeignPtr RawTH3S)+                        in  return . EGADTTObject . GADTTObjectTH3S $ obj'+    "TVirtualPad" -> case obj of+        TObject fptr -> let obj' = TVirtualPad (castForeignPtr fptr :: ForeignPtr RawTVirtualPad)+                        in  return . EGADTTObject . GADTTObjectTVirtualPad $ obj'+    "TPad" -> case obj of+        TObject fptr -> let obj' = TPad (castForeignPtr fptr :: ForeignPtr RawTPad)+                        in  return . EGADTTObject . GADTTObjectTPad $ obj'+    "TButton" -> case obj of+        TObject fptr -> let obj' = TButton (castForeignPtr fptr :: ForeignPtr RawTButton)+                        in  return . EGADTTObject . GADTTObjectTButton $ obj'+    "TGroupButton" -> case obj of+        TObject fptr -> let obj' = TGroupButton (castForeignPtr fptr :: ForeignPtr RawTGroupButton)+                        in  return . EGADTTObject . GADTTObjectTGroupButton $ obj'+    "TCanvas" -> case obj of+        TObject fptr -> let obj' = TCanvas (castForeignPtr fptr :: ForeignPtr RawTCanvas)+                        in  return . EGADTTObject . GADTTObjectTCanvas $ obj'+    "TDialogCanvas" -> case obj of+        TObject fptr -> let obj' = TDialogCanvas (castForeignPtr fptr :: ForeignPtr RawTDialogCanvas)+                        in  return . EGADTTObject . GADTTObjectTDialogCanvas $ obj'+    "TInspectCanvas" -> case obj of+        TObject fptr -> let obj' = TInspectCanvas (castForeignPtr fptr :: ForeignPtr RawTInspectCanvas)+                        in  return . EGADTTObject . GADTTObjectTInspectCanvas $ obj'+    "TEvePad" -> case obj of+        TObject fptr -> let obj' = TEvePad (castForeignPtr fptr :: ForeignPtr RawTEvePad)+                        in  return . EGADTTObject . GADTTObjectTEvePad $ obj'+    "TSlider" -> case obj of+        TObject fptr -> let obj' = TSlider (castForeignPtr fptr :: ForeignPtr RawTSlider)+                        in  return . EGADTTObject . GADTTObjectTSlider $ obj'+    "TApplication" -> case obj of+        TObject fptr -> let obj' = TApplication (castForeignPtr fptr :: ForeignPtr RawTApplication)+                        in  return . EGADTTObject . GADTTObjectTApplication $ obj'+    "TRint" -> case obj of+        TObject fptr -> let obj' = TRint (castForeignPtr fptr :: ForeignPtr RawTRint)+                        in  return . EGADTTObject . GADTTObjectTRint $ obj'+    "TRandom" -> case obj of+        TObject fptr -> let obj' = TRandom (castForeignPtr fptr :: ForeignPtr RawTRandom)+                        in  return . EGADTTObject . GADTTObjectTRandom $ obj'+    _         -> return . EGADTTObject $ GADTTObjectBottom+++++++