readVariants3 :: ArgRes a -> ArgRes b -> ArgRes c
                      -> VARIANT  -> IO (a,b,c)
readVariants3 f g h p
      = do z <- h p
           y <- g (p `addNCastPtr` sizeofVARIANT)
           x <- f (p `addNCastPtr` (2*sizeofVARIANT))
           return (x,y,z)
readVariants3 :: ArgRes a -> ArgRes b -> ArgRes c
                      -> VARIANT  -> IO (a,b,c)
readVariants3 f g h p
      = do z <- h p
           y <- g (p `addNCastPtr` sizeofVARIANT)
           x <- f (p `addNCastPtr` (2*sizeofVARIANT))
           return (x,y,z)
readVariants3 f g h p
      = do z <- h p
           y <- g (p `addNCastPtr` sizeofVARIANT)
           x <- f (p `addNCastPtr` (2*sizeofVARIANT))
           return (x,y,z)