sig   val parse : string -> string list   val substitute : (string -> string) -> string -> string end