inIUnknown :: ArgIn (IUnknown a)
inIUnknown u p
  | isNullInterface u = return ()
  | otherwise         = do 
                             u # addRef
                             writeVarUnknown (castIface u) p
inIUnknown :: ArgIn (IUnknown a)
inIUnknown u p
  | isNullInterface u = return ()
  | otherwise         = do 
                             u # addRef
                             writeVarUnknown (castIface u) p
inIUnknown u p
  | isNullInterface u = return ()
  | otherwise         = do 
                             u # addRef
                             writeVarUnknown (castIface u) p