newEnum :: IDispatch a -> IO (Int, IEnumVARIANT b)
newEnum ip = do
  iunk  <- 
    catchComException (ip # propertyGet "_NewEnum" [] outIUnknown)
                      (\ _ -> ip   # function1 "_NewEnum" [] outIUnknown)
  ienum <- iunk # queryInterface iidIEnumVARIANT
  len   <- 
    catchComException (ip   # propertyGet "length" [] outInt)
                      (\ _ ->  ip   # propertyGet "Count" [] outInt)
  return (len, castIface ienum)
newEnum :: IDispatch a -> IO (Int, IEnumVARIANT b)
newEnum ip = do
  iunk  <- 
    catchComException (ip # propertyGet "_NewEnum" [] outIUnknown)
                      (\ _ -> ip   # function1 "_NewEnum" [] outIUnknown)
  ienum <- iunk # queryInterface iidIEnumVARIANT
  len   <- 
    catchComException (ip   # propertyGet "length" [] outInt)
                      (\ _ ->  ip   # propertyGet "Count" [] outInt)
  return (len, castIface ienum)
newEnum ip = do
  iunk  <- 
    catchComException (ip # propertyGet "_NewEnum" [] outIUnknown)
                      (\ _ -> ip   # function1 "_NewEnum" [] outIUnknown)
  ienum <- iunk # queryInterface iidIEnumVARIANT
  len   <- 
    catchComException (ip   # propertyGet "length" [] outInt)
                      (\ _ ->  ip   # propertyGet "Count" [] outInt)
  return (len, castIface ienum)