<!-- controls.mldoc -->

<!DOCTYPE ML-DOC SYSTEM>

<COPYRIGHT OWNER="The Fellowship of SML/NJ" YEAR=2007>
<VERSION VERID="1.0" YEAR=2007 MONTH=5 DAY=16>
<TITLE>The CONTROLS signature</TITLE>

<INTERFACE>
<HEAD>The <CD/CONTROLS/ signature</HEAD>
<!-- optional SEEALSO; uncomment to use     -->
<!-- <SEEALSO>    -->
<!--   non-empty list of XREFS here   -->
<!-- </SEEALSO>    -->

<PP>
<!-- Some general introductory text -->

<STRUCTURE STRID="Controls">
  <OPAQUE>  <SIGBODY SIGID="CONTROLS" FILE=CONTROLS>
    <SPEC>
      <TYPE><ID>priority<TY>int list
    <SPEC>
      <TYPE><TYPARAM>'a<ID>control
    <SPEC>
      <TYPE><TYPARAM>'a<ID>value_cvt<TY>{tyName : string, fromString : string -> 'a option, toString : 'a -> string}
    <SPEC>
      <VAL>control<TY>{name : string, pri : priority, obscurity : int, help : string, ctl : 'a ref} -> 'a control
        <COMMENT>
          <PROTOTY>
          control {<ARG>name</ARG>, <ARG>pri</ARG>, <ARG>obscurity</ARG>, <ARG>help</ARG>, <ARG>ctl</ARG>}
          </PROTOTY>
          <PP>
          explain the use and semantics of control HERE.
        </COMMENT>
    <SPEC>
      <VAL>genControl<TY>{name : string, pri : priority, obscurity : int, help : string, default : 'a} -> 'a control
        <COMMENT>
          <PROTOTY>
          genControl {<ARG>name</ARG>, <ARG>pri</ARG>, <ARG>obscurity</ARG>, <ARG>help</ARG>, <ARG>default</ARG>}
          </PROTOTY>
          <PP>
          <!-- generate a control -->
        </COMMENT>
    <SPEC>
      <EXN>ValueSyntax<TY>{tyName : string, ctlName : string, value : string}
    <SPEC>
      <VAL>stringControl<TY>'a value_cvt -> 'a control -> string control
        <COMMENT>
          <PROTOTY>
          stringControl <ARG>vc</ARG> <ARG>ctl</ARG>
          </PROTOTY>
          <PP>
          create a string control from a typed control.
        </COMMENT>
    <SPEC>
      <VAL>name<TY>'a control -> string
        <COMMENT>
          <PROTOTY>
          name <ARG>ctl</ARG>
          </PROTOTY>
          <PP>
          <!-- control operations -->
        </COMMENT>
    <SPEC>
      <VAL>get<TY>'a control -> 'a
        <COMMENT>
          <PROTOTY>
          get <ARG>ctl</ARG>
          </PROTOTY>
          <PP>
          <!-- control operations -->
        </COMMENT>
    <SPEC>
      <VAL>set<TY>('a control * 'a) -> unit
        <COMMENT>
          <PROTOTY>
          set (<ARG>ctl</ARG>, <ARG>a</ARG>)
          </PROTOTY>
          <PP>
          <!-- control operations -->
        </COMMENT>
    <SPEC>
      <VAL>set'<TY>('a control * 'a) -> unit -> unit
        <COMMENT>
          <PROTOTY>
          set' (<ARG>ctl</ARG>, <ARG>a</ARG>) <ARG>()</ARG>
          </PROTOTY>
          <PP>
          explain the use and semantics of set' HERE.
        </COMMENT>
    <SPEC>
      <VAL>info<TY>'a control -> {priority : priority, obscurity : int, help : string}
        <COMMENT>
          <PROTOTY>
          info <ARG>ctl</ARG>
          </PROTOTY>
          <PP>
          <!-- delayed, error checking in 1st stage -->
        </COMMENT>
    <SPEC>
      <VAL>save'restore<TY>'a control -> unit -> unit
        <COMMENT>
          <PROTOTY>
          save'restore <ARG>ctl</ARG>
          </PROTOTY>
          <PP>
          captures the current value of the control <ARG>ctl</ARG> and returns a function
	  that restores the value.
        </COMMENT>
    <SPEC>
      <VAL>compare<TY>('a control * 'a control) -> order
        <COMMENT>
          <PROTOTY>
          compare (<ARG>ctl</ARG>, <ARG>ctl'</ARG>)
          </PROTOTY>
          <PP>
          compares the priority of the two controls.
        </COMMENT>
  </SIGBODY>
</STRUCTURE>

</INTERFACE>
