In the terminology of SML an identifier is bound to some definition.
If you haven't defined the identifier in an expression you will get
a complaint about an unbound variable.  If the identifier is in a
binding pattern then you might have intended it to be a constructor
from a datatype.  Here are some examples.
| fun f cmd =
(
    case cmd of
      [] => ""
    | (first::rest) => TxtIO.print frst
) | 
| ubnd1.sml:5.24-5.35 Error: unbound structure: TxtIO in path TxtIO.print
ubnd1.sml:5.24-5.28 Error: unbound variable or constructor: frst |