Some elegant solution?
    " As a consequence, aliases defined in a function are not
    available until after that function is executed. To be safe,
    always put alias definitions on a separate line, and do not use
    alias in compound commands.
And another quote, this time from |zsh| manual:
    There is a commonly encountered problem with aliases illustrated
    by the following code:
    |alias echobar='echo bar';echobar|
    This prints a message that the command echobar could not be found."
   mag=$'\e[35;1m'
   cyn=$'\e[36;1m'
   nrm=$'\e[0m'
   yelline () { echo -e "$yel$@$nrm" }
   function msg () { echo -e "${grn}$@${nrm}" }
   alias msg='yelline ${(%):-%x %I}:'
   function test1 ()
   {
   (
   whence -va msg; declare -f msg
   msg one
   msg () { echo nulled }
   whence -va msg; declare -f msg
   msg where has the alias gone?
   echo "\n==========================\n"
   )
   }
Output:
    $ . test1; test1
   msg is an alias for yelline ${(%):-%x %I}: <<  fine
   msg is a shell function from test1                  << fine,
   function is right and alias is there
   msg () {
        echo -e "${grn}$@${nrm}"
   }
   test1 14: one <<  fine, the alias is  in effect.
   msg is an alias for yelline ${(%):-%x %I}:     << ok ..
   msg is a shell function from test1                 << ... but the
   function is not updated and ...
   msg () {
        echo -e "${grn}$@${nrm}"
   }
   nulled                                                  << ... the
   changed function now overrides the alias!
... in practice this is exactly what I need in the current situation -- 
to kill either function or alias, but it does seem strange that changing 
a function causes it to override an alias.  Is this documented somewhere?