newArr :: Type -> Exp Word32 -> Coord (GPUArray e) 
newArr t bytes = 
  do 
    ident <- newId 
    let gpuV = (CVar ("imm"++show ident) t)
    tell $ Malloc gpuV bytes
    return (GPUArray ("imm"++show ident)
                     t
                     bytes 
                     id)
newArr :: Type -> Exp Word32 -> Coord (GPUArray e)
newArr t bytes = 
  do 
    ident <- newId 
    let gpuV = (CVar ("imm"++show ident) t)
    tell $ Malloc gpuV bytes
    return (GPUArray ("imm"++show ident)
                     t
                     bytes 
                     id)
newArr t bytes = 
  do 
    ident <- newId 
    let gpuV = (CVar ("imm"++show ident) t)
    tell $ Malloc gpuV bytes
    return (GPUArray ("imm"++show ident)
                     t
                     bytes 
                     id)