[MLton-commit] r4910

Stephen Weeks sweeks at mlton.org
Thu Dec 7 15:11:48 PST 2006


First cut at my basis library replacement.

----------------------------------------------------------------------

A   mltonlib/trunk/com/sweeks/
A   mltonlib/trunk/com/sweeks/basic/
A   mltonlib/trunk/com/sweeks/basic/unstable/
A   mltonlib/trunk/com/sweeks/basic/unstable/EXPORT
A   mltonlib/trunk/com/sweeks/basic/unstable/Makefile
A   mltonlib/trunk/com/sweeks/basic/unstable/README
A   mltonlib/trunk/com/sweeks/basic/unstable/array-slice.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/array-slice.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/array.0.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/array.1.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/array.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/basis.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/bit-flags.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/bit-flags.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/bool.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/bool.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/char.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/char.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/date.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/date.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/dir.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/dir.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/endian.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/endian.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/enumerable.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/enumerable.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/enumerate-get.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/enumerate.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/exn.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/exn.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/export.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/export.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/fields-and-tokens.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/file.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/file.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/generic-array.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/generic-slice.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/generic-vector.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/get.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/get.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/in.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/in.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/int-inf.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/int-inf.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/int.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/int.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/int.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/io-desc.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/io-desc.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/lazy.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/lazy.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/lib.mlb
A   mltonlib/trunk/com/sweeks/basic/unstable/list.0.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/list.1.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/list.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/mono-array.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/mono-slice.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/mono-vector-slice.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/mono-vector.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/net.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/net.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/open-export.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/option.0.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/option.1.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/option.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/order.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/order.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/ordered.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/out.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/out.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/packable-real.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/packable-real.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/packable-word.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/packable-word.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/path.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/path.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/poll.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/poll.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/posix.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/posix.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/primitive.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/process.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/process.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/radix.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/radix.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/ram-sequence.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/real-structs.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/real.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/real.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/real.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/recur.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/ref.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/ref.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/scanner.0.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/scanner.1.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/scanner.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/seq.0.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/seq.1.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/seq.2.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/seq.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/sequence.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/slice.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/slice.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/sliceable.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/static-sum.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/static-sum.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/string.0.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/string.1.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/string.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/substring.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/substring.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/subtypes.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/sys-error.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/sys-error.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/thunk.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/thunk.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/time.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/time.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/util.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/util.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/vector-slice.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/vector-slice.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/vector.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/vector.sml
A   mltonlib/trunk/com/sweeks/basic/unstable/word.fun
A   mltonlib/trunk/com/sweeks/basic/unstable/word.sig
A   mltonlib/trunk/com/sweeks/basic/unstable/word.sml

----------------------------------------------------------------------


Property changes on: mltonlib/trunk/com/sweeks/basic/unstable
___________________________________________________________________
Name: svn:ignore
   + TAGS


Added: mltonlib/trunk/com/sweeks/basic/unstable/EXPORT
===================================================================
--- mltonlib/trunk/com/sweeks/basic/unstable/EXPORT	2006-12-07 04:32:24 UTC (rev 4909)
+++ mltonlib/trunk/com/sweeks/basic/unstable/EXPORT	2006-12-07 23:11:38 UTC (rev 4910)
@@ -0,0 +1,2313 @@
+type 'a array = 'a array
+datatype bool = false | true
+eqtype char = char
+type exn = exn
+type int = int
+datatype 'a list = nil | :: of 'a * 'a list
+datatype 'a option = None | Some of 'a
+datatype order = Equal | Greater | Less
+type 'a seq = 'a seq
+eqtype string = string
+type 'a thunk = unit -> 'a
+eqtype unit = unit
+type 'a vector = 'a vector
+type word = word
+val * : ('a * 'a) -> 'a
+val + : ('a * 'a) -> 'a
+val - : ('a * 'a) -> 'a
+val / : ('a * 'a) -> 'a
+val < : ('a * 'a) -> bool
+val <= : ('a * 'a) -> bool
+val <> : ('a * 'a) -> bool
+val = : ('a * 'a) -> bool
+val > : ('a * 'a) -> bool
+val >= : ('a * 'a) -> bool
+val @ : ('a list * 'a list) -> 'a list
+val abs: 'a -> 'a
+val concat: string seq -> string
+val die: string -> 'a
+val div: ('a * 'a) -> 'a
+val finally: ((unit -> 'a) * (unit -> unit)) -> 'a
+val ignore: 'a -> unit
+val lazy: (unit -> 'a) -> (unit -> 'a)
+val mod: ('a * 'a) -> 'a
+val not: bool -> bool
+val o: (('a -> 'b) * ('c -> 'a)) -> ('c -> 'b)
+val print: string -> unit
+val valOf: 'a option -> 'a
+val ~ : 'a -> 'a
+structure Array: ARRAY
+		 where type 'a elem = 'a Array.elem
+		 where type 'a t = 'a ArraySlice.base
+		 where type 'a unfold = 'a Array.unfold
+		 where type 'a unfoldR = 'a Array.unfoldR
+structure ArraySlice: ARRAY_SLICE
+		      where type 'a base = 'a ArraySlice.base
+		      where type 'a elem = 'a ArraySlice.elem
+		      where type 'a t = 'a ArraySlice.t
+structure Bool: BOOL
+structure Char: CHAR
+		where type t = char
+structure CommandLine: COMMAND_LINE
+structure Date: DATE
+		where type Month.t = Date.Month.t
+		where type WeekDay.t = Date.WeekDay.t
+		where type t = Date.t
+structure Dir: DIR
+	       where type Stream.t = Dir.Stream.t
+structure Endian: ENDIAN
+		  where type t = Endian.t
+structure Exn: EXN
+	       where type t = exn
+structure File: FILE
+		where type AccessMode.t = File.AccessMode.t
+		where type Id.t = File.Id.t
+structure In: IN
+	      where type t = In.t
+structure Int: INT
+	       where type t = int
+structure Int16: INT
+		 where type t = Int16.t
+structure Int32: INT
+		 where type t = Int32.t
+structure Int64: INT
+		 where type t = Int64.t
+structure Int8: INT
+		where type t = Int8.t
+structure IntInf: INT_INF
+		  where type t = IntInf.t
+structure IoDesc: IO_DESC
+		  where type Kind.t = IoDesc.Kind.t
+		  where type t = IoDesc.t
+structure LargeInt: INT
+		    where type t = LargeInt.t
+structure LargeReal: REAL
+		     where type Class.t = LargeReal.Class.t
+		     where type Format.t = LargeReal.Format.t
+		     where type RoundingMode.t = LargeReal.RoundingMode.t
+		     where type t = LargeReal.t
+structure LargeWord: WORD
+		     where type t = LargeWord.t
+structure Lazy: LAZY
+structure List: LIST
+		where type 'a elem = 'a List.elem
+		where type 'a unfold = 'a List.unfold
+		where type 'a unfoldR = 'a List.unfoldR
+structure Net: NET
+	       where type Family.inet = Net.Family.inet
+	       where type 'a Family.t = 'a Net.Family.t
+	       where type Family.unix = Net.Family.unix
+	       where type Family.unknown = Net.Family.unknown
+	       where type Host.Address.t = Net.Host.Address.t
+	       where type Host.t = Net.Host.t
+	       where type Protocol.t = Net.Protocol.t
+	       where type Service.t = Net.Service.t
+	       where type 'a Socket.Address.t = 'a Net.Socket.Address.t
+	       where type ('a, 'b, 'c) Socket.Block.t = ('a, 'b, 'c) Net.Socket.Block.t
+	       where type Socket.Desc.t = Net.Socket.Desc.t
+	       where type Socket.Option.ro = Net.Socket.Option.ro
+	       where type Socket.Option.rw = Net.Socket.Option.rw
+	       where type ('a, 'b, 'c, 'd) Socket.Option.t = ('a, 'b, 'c, 'd) Net.Socket.Option.t
+	       where type ('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i) Socket.Receive.Block.t = ('a,
+											 'b,
+											 'c,
+											 'd,
+											 'e,
+											 'f,
+											 'g,
+											 'h,
+											 'i) Net.Socket.Receive.Block.t
+	       where type Socket.Receive.Flag.t = Net.Socket.Receive.Flag.t
+	       where type ('a, 'b, 'c, 'd) Socket.Receive.From.t = ('a,
+								    'b,
+								    'c,
+								    'd) Net.Socket.Receive.From.t
+	       where type ('a, 'b, 'c, 'd, 'e, 'f, 'g) Socket.Receive.To.t = ('a,
+									      'b,
+									      'c,
+									      'd,
+									      'e,
+									      'f,
+									      'g) Net.Socket.Receive.To.t
+	       where type ('a, 'b, 'c, 'd, 'e, 'f, 'g) Socket.Send.Block.t = ('a,
+									      'b,
+									      'c,
+									      'd,
+									      'e,
+									      'f,
+									      'g) Net.Socket.Send.Block.t
+	       where type Socket.Send.Flag.t = Net.Socket.Send.Flag.t
+	       where type Socket.Send.From.t = Net.Socket.Send.From.t
+	       where type ('a, 'b, 'c, 'd) Socket.Send.To.t = ('a, 'b, 'c, 'd) Net.Socket.Send.To.t
+	       where type Socket.ShutdownMode.t = Net.Socket.ShutdownMode.t
+	       where type Socket.Type.active = Net.Socket.Type.active
+	       where type Socket.Type.dgram = Net.Socket.Type.dgram
+	       where type Socket.Type.passive = Net.Socket.Type.passive
+	       where type 'a Socket.Type.stream = 'a Net.Socket.Type.stream
+	       where type 'a Socket.Type.t = 'a Net.Socket.Type.t
+	       where type Socket.Type.unknown = Net.Socket.Type.unknown
+	       where type ('a, 'b) Socket.sock = ('a, 'b) Net.Socket.sock
+structure Option: OPTION
+		  where type 'a t = 'a option
+structure Order: ORDER
+		 where type t = Order.t
+structure Out: OUT
+	       where type t = Out.t
+structure Path: PATH
+		where type Pieces.t = Path.Pieces.t
+structure Poll: POLL
+		where type Desc.t = Poll.Desc.t
+		where type Info.t = Poll.Info.t
+structure Posix: POSIX
+		 where type AccessMode.t = Posix.AccessMode.t
+		 where type Dev.t = Posix.Dev.t
+		 where type DirStream.t = Posix.DirStream.t
+		 where type Error.t = Posix.Error.t
+		 where type ExitStatus.t = Posix.ExitStatus.t
+		 where type ('a, 'b) Fcntl.t = ('a, 'b) Posix.Fcntl.t
+		 where type FileDesc.t = Posix.FileDesc.t
+		 where type FileDescFlags.t = Posix.FileDescFlags.t
+		 where type FileStatusFlags.t = Posix.FileStatusFlags.t
+		 where type FlowAction.t = Posix.FlowAction.t
+		 where type Gid.t = Posix.Gid.t
+		 where type Group.t = Posix.Group.t
+		 where type Ino.t = Posix.Ino.t
+		 where type KillArg.t = Posix.KillArg.t
+		 where type Lock.Type.t = Posix.Lock.Type.t
+		 where type Lock.t = Posix.Lock.t
+		 where type Mode.t = Posix.Mode.t
+		 where type OpenFlags.t = Posix.OpenFlags.t
+		 where type OpenMode.t = Posix.OpenMode.t
+		 where type Passwd.t = Posix.Passwd.t
+		 where type Pid.t = Posix.Pid.t
+		 where type QueueSel.t = Posix.QueueSel.t
+		 where type SetAction.t = Posix.SetAction.t
+		 where type Signal.t = Posix.Signal.t
+		 where type Stat.t = Posix.Stat.t
+		 where type Termios.C.t = Posix.Termios.C.t
+		 where type Termios.CC.t = Posix.Termios.CC.t
+		 where type Termios.I.t = Posix.Termios.I.t
+		 where type Termios.L.t = Posix.Termios.L.t
+		 where type Termios.O.t = Posix.Termios.O.t
+		 where type Termios.Speed.t = Posix.Termios.Speed.t
+		 where type Termios.t = Posix.Termios.t
+		 where type Uid.t = Posix.Uid.t
+		 where type WaitPidArg.t = Posix.WaitPidArg.t
+		 where type WaitPidFlags.t = Posix.WaitPidFlags.t
+		 where type Whence.t = Posix.Whence.t
+structure Process: PROCESS
+		   where type Status.t = Process.Status.t
+structure Radix: RADIX
+		 where type t = Radix.t
+structure Real: PACKABLE_REAL
+		where type Class.t = Real.Class.t
+		where type Format.t = Real.Format.t
+		where type RoundingMode.t = Real.RoundingMode.t
+		where type t = Real.t
+structure Real32: PACKABLE_REAL
+		  where type Class.t = Real32.Class.t
+		  where type Format.t = Real32.Format.t
+		  where type RoundingMode.t = Real32.RoundingMode.t
+		  where type t = Real32.t
+structure Real64: PACKABLE_REAL
+		  where type Class.t = Real64.Class.t
+		  where type Format.t = Real64.Format.t
+		  where type RoundingMode.t = Real64.RoundingMode.t
+		  where type t = Real64.t
+structure Ref: REF
+structure Scanner: SCANNER
+		   where type 'a t = 'a Scanner.t
+structure Seq: SEQ
+	       where type 'a elem = 'a Seq.elem
+	       where type 'a t = 'a seq
+	       where type 'a unfold = 'a Seq.unfold
+	       where type 'a unfoldR = 'a Seq.unfoldR
+structure String: STRING
+		  where type t = string
+		  where type 'a unfold = 'a String.unfold
+		  where type 'a unfoldR = 'a String.unfoldR
+structure Substring: SUBSTRING
+		     where type 'a base = 'a Substring.base
+		     where type t = Substring.t
+structure SysError: SYS_ERROR
+		    where type Exn.t = SysError.Exn.t
+		    where type t = SysError.t
+structure Time: TIME
+		where type t = Time.t
+structure Vector: VECTOR
+		  where type 'a elem = 'a Vector.elem
+		  where type 'a t = 'a vector
+		  where type 'a unfold = 'a Vector.unfold
+		  where type 'a unfoldR = 'a Vector.unfoldR
+structure VectorSlice: VECTOR_SLICE
+		       where type 'a base = 'a vector
+		       where type 'a elem = 'a VectorSlice.elem
+		       where type 'a t = 'a VectorSlice.t
+structure Word: WORD
+		where type t = word
+structure Word16: WORD
+		  where type t = Word16.t
+structure Word32: PACKABLE_WORD
+		  where type t = Word32.t
+structure Word64: WORD
+		  where type t = Word64.t
+structure Word8: WORD
+		 where type t = Word8.t
+signature ARRAY = 
+   sig
+      type 'a elem = 'a ?.elem
+      type 'a t = 'a ?.t
+      type 'a t0 = 'a ?.t
+      type 'a unfold = 'a ?.unfold
+      type 'a unfoldR = 'a ?.unfoldR
+      val all: ('a ?.t * ('a ?.elem -> bool)) -> bool
+      val append: ('a ?.t * 'a ?.t) -> 'a ?.t
+      val concat: 'a ?.t seq -> 'a ?.t
+      val cons: ('a ?.elem * 'a ?.t) -> 'a ?.t
+      val drop: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t
+      val dropPrefix: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t
+      val dropPrefixN: ('a ?.t * Int32.t) -> 'a ?.t
+      val dropSuffix: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t
+      val dropSuffixN: ('a ?.t * Int32.t) -> 'a ?.t
+      val empty: unit -> 'a ?.t
+      val exists: ('a ?.t * ('a ?.elem -> bool)) -> bool
+      val fields: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t seq
+      val find: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.elem option
+      val fold: ('a ?.t * 'b * (('a ?.elem * 'b) -> 'b)) -> 'b
+      val for: ('a ?.t * ('a ?.elem -> unit)) -> unit
+      val isEmpty: 'a ?.t -> bool
+      val join: ('a ?.t seq * 'a ?.t) -> 'a ?.t
+      val keep: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t
+      val keepPrefix: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t
+      val keepPrefixN: ('a ?.t * Int32.t) -> 'a ?.t
+      val keepSuffix: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t
+      val keepSuffixN: ('a ?.t * Int32.t) -> 'a ?.t
+      val last: 'a ?.t -> 'a ?.elem
+      val make: (Int32.t * 'a) -> 'a ?.t
+      val map: ('a ?.t * ('a ?.elem -> 'b ?.elem)) -> 'b ?.t
+      val ofSeq: 'a ?.elem seq -> 'a ?.t
+      val ofSeqN: ('a ?.elem seq * Int32.t) -> 'a ?.t
+      val recur: ('a ?.t
+		  * 'b
+		  * ('b -> 'c)
+		  * (('a ?.elem * 'b * ('b -> 'c)) -> 'c))
+		 -> 'c
+      val reverse: 'a ?.t -> 'a ?.t
+      val separate: ('a ?.t * 'a ?.elem) -> 'a ?.t
+      val single: 'a ?.elem -> 'a ?.t
+      val size: 'a ?.t -> Int32.t
+      val splitPrefix: ('a ?.t * ('a ?.elem -> bool)) -> ('a ?.t * 'a ?.t)
+      val sub: ('a ?.t * Int32.t) -> 'a ?.elem
+      val tabulate: (Int32.t * (Int32.t -> 'a ?.elem)) -> 'a ?.t
+      val toSeq: 'a ?.t -> 'a ?.elem seq
+      val toSeqR: 'a ?.t -> 'a ?.elem seq
+      val tokens: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t seq
+      val unfold: ('a * ('a -> ('b ?.elem * 'a) option))
+		  -> ('b ?.t * 'a ?.unfold)
+      val unfoldN: (Int32.t * 'a * ((Int32.t * 'a) -> ('b ?.elem * 'a) option))
+		   -> ('b ?.t * 'a ?.unfold)
+      val unfoldNR: (Int32.t * 'a * ((Int32.t * 'a) -> ('b ?.elem * 'a) option))
+		    -> ('b ?.t * 'a ?.unfoldR)
+      val unfoldR: ('a * ('a -> ('b ?.elem * 'a) option))
+		   -> ('b ?.t * 'a ?.unfoldR)
+      val update: ('a ?.t * Int32.t * 'a) -> unit
+      val updates: ('a ?.t * Int32.t * 'a seq) -> unit
+      structure Unsafe:
+	 sig
+	    val make: Int32.t -> 'a ?.t
+	    val sub: ('a ?.t * Int32.t) -> 'a
+	    val update: ('a ?.t * Int32.t * 'a) -> unit
+	 end
+   end
+signature ARRAY_SLICE = 
+   sig
+      type 'a base = 'a ?.base
+      type 'a elem = 'a ?.elem
+      type 'a t = 'a ?.t
+      type 'a t0 = 'a ?.t
+      val all: ('a ?.t * ('a ?.elem -> bool)) -> bool
+      val base: 'a ?.t -> ('a ?.base * {start: Int32.t})
+      val dropPrefix: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t
+      val dropPrefixN: ('a ?.t * Int32.t) -> 'a ?.t
+      val dropSuffix: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t
+      val dropSuffixN: ('a ?.t * Int32.t) -> 'a ?.t
+      val exists: ('a ?.t * ('a ?.elem -> bool)) -> bool
+      val fields: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t seq
+      val find: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.elem option
+      val fold: ('a ?.t * 'b * (('a ?.elem * 'b) -> 'b)) -> 'b
+      val for: ('a ?.t * ('a ?.elem -> unit)) -> unit
+      val full: 'a ?.base -> 'a ?.t
+      val get: 'a ?.t -> ('a ?.elem * 'a ?.t) option
+      val isEmpty: 'a ?.t -> bool
+      val keepPrefix: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t
+      val keepPrefixN: ('a ?.t * Int32.t) -> 'a ?.t
+      val keepSuffix: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t
+      val keepSuffixN: ('a ?.t * Int32.t) -> 'a ?.t
+      val last: 'a ?.t -> 'a ?.elem
+      val map: ('a ?.t * ('a ?.elem -> 'b ?.elem)) -> 'b ?.base
+      val recur: ('a ?.t
+		  * 'b
+		  * ('b -> 'c)
+		  * (('a ?.elem * 'b * ('b -> 'c)) -> 'c))
+		 -> 'c
+      val size: 'a ?.t -> Int32.t
+      val slice: ('a ?.t * {size: Int32.t, start: Int32.t}) -> 'a ?.t
+      val splitPrefix: ('a ?.t * ('a ?.elem -> bool)) -> ('a ?.t * 'a ?.t)
+      val sub: ('a ?.t * Int32.t) -> 'a ?.elem
+      val toSeq: 'a ?.t -> 'a ?.elem seq
+      val toSeqR: 'a ?.t -> 'a ?.elem seq
+      val tokens: ('a ?.t * ('a ?.elem -> bool)) -> 'a ?.t seq
+   end
+signature BOOL = 
+   sig
+      datatype t = false | true
+      val not: bool -> bool
+   end
+signature CHAR = 
+   sig
+      type t = ?.t
+      val < : (?.t * ?.t) -> bool
+      val <= : (?.t * ?.t) -> bool
+      val == : (?.t * ?.t) -> bool
+      val > : (?.t * ?.t) -> bool
+      val >= : (?.t * ?.t) -> bool
+      val compare: (?.t * ?.t) -> order
+      val isAlpha: ?.t -> bool
+      val isAlphaNum: ?.t -> bool
+      val isAscii: ?.t -> bool
+      val isCntrl: ?.t -> bool
+      val isDigit: ?.t -> bool
+      val isGraph: ?.t -> bool
+      val isHexDigit: ?.t -> bool
+      val isLower: ?.t -> bool
+      val isPrint: ?.t -> bool
+      val isPunct: ?.t -> bool
+      val isSpace: ?.t -> bool
+      val isUpper: ?.t -> bool
+      val ofInt: Int32.t -> ?.t
+      val toInt: ?.t -> Int32.t
+      val toLower: ?.t -> ?.t
+      val toUpper: ?.t -> ?.t
+   end
+signature COMMAND_LINE = 
+   sig
+      val arguments: unit -> string list
+      val name: unit -> string
+   end
+signature DATE = 
+   sig
+      type t = ?.t
+      val format: (?.t * string) -> string
+      val hour: ?.t -> Int32.t
+      val isDst: ?.t -> bool option
+      val localOffset: unit -> Time.t
+      val make: {hour: Int32.t,
+		 minute: Int32.t,
+		 month: ?.Month.t,
+		 monthDay: Int32.t,
+		 offset: Time.t option,
+		 second: Int32.t,
+		 year: Int32.t}
+		-> ?.t
+      val minute: ?.t -> Int32.t
+      val month: ?.t -> ?.Month.t
+      val monthDay: ?.t -> Int32.t
+      val ofString: string -> ?.t option
+      val ofTimeLocal: Time.t -> ?.t
+      val ofTimeUniv: Time.t -> ?.t
+      val offset: ?.t -> Time.t option
+      val scanner: char seq -> (?.t * char seq) option
+      val second: ?.t -> Int32.t
+      val toString: ?.t -> string
+      val toTime: ?.t -> Time.t
+      val weekDay: ?.t -> ?.WeekDay.t
+      val year: ?.t -> Int32.t
+      val yearDay: ?.t -> Int32.t
+      structure Month:
+	 sig
+	    type t = ?.Month.t
+	    val april: ?.Month.t
+	    val august: ?.Month.t
+	    val december: ?.Month.t
+	    val february: ?.Month.t
+	    val january: ?.Month.t
+	    val july: ?.Month.t
+	    val june: ?.Month.t
+	    val march: ?.Month.t
+	    val may: ?.Month.t
+	    val november: ?.Month.t
+	    val october: ?.Month.t
+	    val september: ?.Month.t
+	 end
+      structure WeekDay:
+	 sig
+	    type t = ?.WeekDay.t
+	    val friday: ?.WeekDay.t
+	    val monday: ?.WeekDay.t
+	    val saturday: ?.WeekDay.t
+	    val sunday: ?.WeekDay.t
+	    val thursday: ?.WeekDay.t
+	    val tuesday: ?.WeekDay.t
+	    val wednesday: ?.WeekDay.t
+	 end
+   end
+signature DIR = 
+   sig
+      eqtype t = string
+      val changeTo: string -> unit
+      val create: string -> unit
+      val current: unit -> string
+      val openStream: string -> ?.Stream.t
+      val remove: string -> unit
+      structure Stream:
+	 sig
+	    type t = ?.Stream.t
+	    val close: ?.Stream.t -> unit
+	    val read: ?.Stream.t -> string option
+	    val rewind: ?.Stream.t -> unit
+	 end
+   end
+signature ENDIAN = 
+   sig
+      datatype t = Big | Little
+   end
+signature EXN = 
+   sig
+      type t = ?.t
+      val finally: ((unit -> 'a) * (unit -> unit)) -> 'a
+      val try: ((unit -> 'a) * ('a -> 'b) * (?.t -> 'b)) -> 'b
+   end
+signature FILE = 
+   sig
+      eqtype t = string
+      val canAccess: (string * ?.AccessMode.t list) -> bool
+      val id: string -> ?.Id.t
+      val modTime: string -> Time.t
+      val openIn: string -> In.t
+      val openOut: string -> Out.t
+      val remove: string -> unit
+      val rename: {new: string, old: string} -> unit
+      val setTime: (string * Time.t) -> unit
+      val size: string -> Int64.t
+      val temp: {prefix: string, suffix: string} -> (string * Out.t)
+      val withIn: (string * (In.t -> 'a)) -> 'a
+      val withOut: (string * (Out.t -> 'a)) -> 'a
+      structure AccessMode:
+	 sig
+	    type t = ?.AccessMode.t
+	    val exec: ?.AccessMode.t
+	    val read: ?.AccessMode.t
+	    val write: ?.AccessMode.t
+	 end
+      structure Id:
+	 sig
+	    type t = ?.Id.t
+	    val == : (?.Id.t * ?.Id.t) -> bool
+	    val compare: (?.Id.t * ?.Id.t) -> order
+	    val hash: ?.Id.t -> Word32.t
+	 end
+   end
+signature IN = 
+   sig
+      type t = ?.t
+      val close: ?.t -> unit
+      val get1: ?.t -> char option
+      val getAll: ?.t -> string
+      val getLine: ?.t -> string option
+      val lines: ?.t -> string seq
+      val standard: ?.t
+   end
+signature INT = 
+   sig
+      type t = ?.t
+      val * : (?.t * ?.t) -> ?.t
+      val + : (?.t * ?.t) -> ?.t
+      val - : (?.t * ?.t) -> ?.t
+      val < : (?.t * ?.t) -> bool
+      val <= : (?.t * ?.t) -> bool
+      val == : (?.t * ?.t) -> bool
+      val > : (?.t * ?.t) -> bool
+      val >= : (?.t * ?.t) -> bool
+      val compare: (?.t * ?.t) -> order
+      val div: (?.t * ?.t) -> ?.t
+      val fold: (?.t * ?.t * 'a * ((?.t * 'a) -> 'a)) -> 'a
+      val foldDown: (?.t * ?.t * 'a * ((?.t * 'a) -> 'a)) -> 'a
+      val for: (?.t * ?.t * (?.t -> unit)) -> unit
+      val fromTo: (?.t * ?.t) -> ?.t seq
+      val fromToBy: (?.t * ?.t * ?.t) -> ?.t seq
+      val geu: (?.t * ?.t) -> bool
+      val mod: (?.t * ?.t) -> ?.t
+      val ofString: string -> ?.t option
+      val ofStringRadix: (string * Radix.t) -> ?.t option
+      val quot: (?.t * ?.t) -> ?.t
+      val rem: (?.t * ?.t) -> ?.t
+      val scanner: Radix.t -> (char seq -> (?.t * char seq) option)
+      val toString: ?.t -> string
+      val toStringRadix: (?.t * Radix.t) -> string
+      val toWord: ?.t -> Word32.t
+   end
+signature INT_INF = 
+   sig
+      type t = ?.t
+      val * : (?.t * ?.t) -> ?.t
+      val + : (?.t * ?.t) -> ?.t
+      val - : (?.t * ?.t) -> ?.t
+      val < : (?.t * ?.t) -> bool
+      val <= : (?.t * ?.t) -> bool
+      val == : (?.t * ?.t) -> bool
+      val > : (?.t * ?.t) -> bool
+      val >= : (?.t * ?.t) -> bool
+      val compare: (?.t * ?.t) -> order
+      val div: (?.t * ?.t) -> ?.t
+      val fold: (?.t * ?.t * 'a * ((?.t * 'a) -> 'a)) -> 'a
+      val foldDown: (?.t * ?.t * 'a * ((?.t * 'a) -> 'a)) -> 'a
+      val for: (?.t * ?.t * (?.t -> unit)) -> unit
+      val fromTo: (?.t * ?.t) -> ?.t seq
+      val fromToBy: (?.t * ?.t * ?.t) -> ?.t seq
+      val geu: (?.t * ?.t) -> bool
+      val mod: (?.t * ?.t) -> ?.t
+      val ofString: string -> ?.t option
+      val ofStringRadix: (string * Radix.t) -> ?.t option
+      val quot: (?.t * ?.t) -> ?.t
+      val rem: (?.t * ?.t) -> ?.t
+      val scanner: Radix.t -> (char seq -> (?.t * char seq) option)
+      val toString: ?.t -> string
+      val toStringRadix: (?.t * Radix.t) -> string
+      val toWord: ?.t -> Word32.t
+   end
+signature IO_DESC = 
+   sig
+      type t = ?.t
+      val compare: (?.t * ?.t) -> order
+      val hash: ?.t -> Word32.t
+      structure Kind:
+	 sig
+	    type t = ?.Kind.t
+	    val == : (?.Kind.t * ?.Kind.t) -> bool
+	    val device: ?.Kind.t
+	    val dir: ?.Kind.t
+	    val file: ?.Kind.t
+	    val pipe: ?.Kind.t
+	    val socket: ?.Kind.t
+	    val symlink: ?.Kind.t
+	    val tty: ?.Kind.t
+	 end
+   end
+signature LAZY = 
+   sig
+      val memo: (unit -> 'a) -> (unit -> 'a)
+   end
+signature LIST = 
+   sig
+      type 'a elem = 'a ?.elem
+      datatype 'a t = nil | :: of 'a * 'a list
+      eqtype 'a t0 = 'a list
+      type 'a unfold = 'a ?.unfold
+      type 'a unfoldR = 'a ?.unfoldR
+      val all: ('a list * ('a ?.elem -> bool)) -> bool
+      val append: ('a list * 'a list) -> 'a list
+      val concat: 'a list seq -> 'a list
+      val cons: ('a ?.elem * 'a list) -> 'a list
+      val drop: ('a list * ('a ?.elem -> bool)) -> 'a list
+      val dropPrefix: ('a list * ('a ?.elem -> bool)) -> 'a list
+      val dropPrefixN: ('a list * Int32.t) -> 'a list
+      val dropSuffix: ('a list * ('a ?.elem -> bool)) -> 'a list
+      val dropSuffixN: ('a list * Int32.t) -> 'a list
+      val empty: unit -> 'a list
+      val exists: ('a list * ('a ?.elem -> bool)) -> bool
+      val fields: ('a list * ('a ?.elem -> bool)) -> 'a list seq
+      val find: ('a list * ('a ?.elem -> bool)) -> 'a ?.elem option
+      val fold: ('a list * 'b * (('a ?.elem * 'b) -> 'b)) -> 'b
+      val for: ('a list * ('a ?.elem -> unit)) -> unit
+      val isEmpty: 'a list -> bool
+      val join: ('a list seq * 'a list) -> 'a list
+      val keep: ('a list * ('a ?.elem -> bool)) -> 'a list
+      val keepPrefix: ('a list * ('a ?.elem -> bool)) -> 'a list
+      val keepPrefixN: ('a list * Int32.t) -> 'a list
+      val keepSuffix: ('a list * ('a ?.elem -> bool)) -> 'a list
+      val keepSuffixN: ('a list * Int32.t) -> 'a list
+      val last: 'a list -> 'a ?.elem
+      val map: ('a list * ('a ?.elem -> 'b ?.elem)) -> 'b list
+      val ofSeq: 'a ?.elem seq -> 'a list
+      val ofSeqN: ('a ?.elem seq * Int32.t) -> 'a list
+      val recur: ('a list
+		  * 'b
+		  * ('b -> 'c)
+		  * (('a ?.elem * 'b * ('b -> 'c)) -> 'c))
+		 -> 'c
+      val reverse: 'a list -> 'a list
+      val separate: ('a list * 'a ?.elem) -> 'a list
+      val single: 'a ?.elem -> 'a list
+      val size: 'a list -> Int32.t
+      val splitPrefix: ('a list * ('a ?.elem -> bool)) -> ('a list * 'a list)
+      val sub: ('a list * Int32.t) -> 'a ?.elem
+      val tabulate: (Int32.t * (Int32.t -> 'a ?.elem)) -> 'a list
+      val toSeq: 'a list -> 'a ?.elem seq
+      val toSeqR: 'a list -> 'a ?.elem seq
+      val tokens: ('a list * ('a ?.elem -> bool)) -> 'a list seq
+      val unfold: ('a * ('a -> ('b ?.elem * 'a) option))
+		  -> ('b list * 'a ?.unfold)
+      val unfoldN: (Int32.t * 'a * ((Int32.t * 'a) -> ('b ?.elem * 'a) option))
+		   -> ('b list * 'a ?.unfold)
+      val unfoldNR: (Int32.t * 'a * ((Int32.t * 'a) -> ('b ?.elem * 'a) option))
+		    -> ('b list * 'a ?.unfoldR)
+      val unfoldR: ('a * ('a -> ('b ?.elem * 'a) option))
+		   -> ('b list * 'a ?.unfoldR)
+   end
+signature NET = 
+   sig
+      val getHostName: unit -> string
+      structure Family:
+	 sig
+	    type inet = ?.Family.inet
+	    type 'a t = 'a ?.Family.t
+	    type unix = ?.Family.unix
+	    type unknown = ?.Family.unknown
+	    val == : ('a ?.Family.t * 'a ?.Family.t) -> bool
+	    val all: unit
+		     -> (?.Family.unknown ?.Family.t * {name: string}) ?.vector
+	    val inet: ?.Family.inet ?.Family.t
+	    val ofString: string -> ?.Family.unknown ?.Family.t option
+	    val toString: 'a ?.Family.t -> string
+	    val unix: ?.Family.unix ?.Family.t
+	 end
+      structure Host:
+	 sig
+	    type t = ?.Host.t
+	    val address: ?.Host.t -> ?.Host.Address.t
+	    val addresses: ?.Host.t -> ?.Host.Address.t ?.vector
+	    val aliases: ?.Host.t -> string ?.vector
+	    val family: ?.Host.t -> ?.Family.unknown ?.Family.t
+	    val getByAddress: ?.Host.Address.t -> ?.Host.t option
+	    val getByName: string -> ?.Host.t option
+	    val name: ?.Host.t -> string
+	    structure Address:
+	       sig
+		  type t = ?.Host.Address.t
+		  val == : (?.Host.Address.t * ?.Host.Address.t) -> bool
+		  val ofString: string -> ?.Host.Address.t option
+		  val scanner: char seq -> (?.Host.Address.t * char seq) option
+		  val toString: ?.Host.Address.t -> string
+	       end
+	 end
+      structure Protocol:
+	 sig
+	    type t = ?.Protocol.t
+	    val aliases: ?.Protocol.t -> string ?.vector
+	    val getByName: string -> ?.Protocol.t option
+	    val getByNumber: Int32.t -> ?.Protocol.t option
+	    val name: ?.Protocol.t -> string
+	    val number: ?.Protocol.t -> Int32.t
+	 end
+      structure Service:
+	 sig
+	    type t = ?.Service.t
+	    val aliases: ?.Service.t -> string ?.vector
+	    val getByName: (string * string option) -> ?.Service.t option
+	    val getByPort: (Int32.t * string option) -> ?.Service.t option
+	    val name: ?.Service.t -> string
+	    val port: ?.Service.t -> Int32.t
+	    val protocol: ?.Service.t -> string
+	 end
+      structure Socket:
+	 sig
+	    type ('a, 'b) sock = ('a, 'b) ?.Socket.sock
+	    type ('a, 'b) t = ('a, 'b) ?.Socket.sock
+	    val accept: (('a, ?.Socket.Type.passive ?.Socket.Type.stream) ?.Socket.sock
+			 * ((('a, ?.Socket.Type.active ?.Socket.Type.stream) ?.Socket.sock
+			     * 'a ?.Socket.Address.t),
+			    (('a, ?.Socket.Type.active ?.Socket.Type.stream) ?.Socket.sock
+			     * 'a ?.Socket.Address.t) option,
+			    'b) ?.Socket.Block.t)
+			-> 'b
+	    val bind: (('a, 'b) ?.Socket.sock * 'a ?.Socket.Address.t) -> unit
+	    val close: ('a, 'b) ?.Socket.sock -> unit
+	    val connect: (('a, 'b) ?.Socket.sock
+			  * 'a ?.Socket.Address.t
+			  * (unit, unit option, 'c) ?.Socket.Block.t)
+			 -> 'c
+	    val desc: ('a, 'b) ?.Socket.sock -> ?.Socket.Desc.t
+	    val getOption: (('a, 'b) ?.Socket.sock
+			    * ('c, 'a, 'b, 'd) ?.Socket.Option.t)
+			   -> 'c
+	    val ioDesc: ('a, 'b) ?.Socket.sock -> Int32.t
+	    val listen: (('a, ?.Socket.Type.passive ?.Socket.Type.stream) ?.Socket.sock
+			 * Int32.t)
+			-> unit
+	    val make: ('a ?.Family.t
+		       * 'b ?.Socket.Type.t
+		       * {protocol: Int32.t} option)
+		      -> ('a, 'b) ?.Socket.sock
+	    val makePair: ('a ?.Family.t
+			   * 'b ?.Socket.Type.t
+			   * {protocol: Int32.t} option)
+			  -> (('a, 'b) ?.Socket.sock * ('a, 'b) ?.Socket.sock)
+	    val myAddress: ('a, 'b) ?.Socket.sock -> 'a ?.Socket.Address.t
+	    val peerAddress: ('a, 'b) ?.Socket.sock -> 'a ?.Socket.Address.t
+	    val select: {exs: ?.Socket.Desc.t list,
+			 rds: ?.Socket.Desc.t list,
+			 timeout: Time.t option,
+			 wrs: ?.Socket.Desc.t list}
+			-> {exs: ?.Socket.Desc.t list,
+			    rds: ?.Socket.Desc.t list,
+			    wrs: ?.Socket.Desc.t list}
+	    val setOption: (('a, 'b) ?.Socket.sock
+			    * ('c, 'a, 'b, ?.Socket.Option.rw) ?.Socket.Option.t
+			    * 'c)
+			   -> unit
+	    val shutdown: (('a, 'b ?.Socket.Type.stream) ?.Socket.sock
+			   * ?.Socket.ShutdownMode.t)
+			  -> unit
+	    structure Address:
+	       sig
+		  type 'a t = 'a ?.Socket.Address.t
+		  val == : ('a ?.Socket.Address.t * 'a ?.Socket.Address.t)
+			   -> bool
+		  val family: 'a ?.Socket.Address.t -> 'a ?.Family.t
+		  val inet: {port: Int32.t} -> ?.Family.inet ?.Socket.Address.t
+		  val ofHost: (?.Host.Address.t * {port: Int32.t})
+			      -> ?.Family.inet ?.Socket.Address.t
+		  val ofUnix: string -> ?.Family.unix ?.Socket.Address.t
+		  val toHost: ?.Family.inet ?.Socket.Address.t
+			      -> (?.Host.Address.t * {port: Int32.t})
+		  val toUnix: ?.Family.unix ?.Socket.Address.t -> string
+	       end
+	    structure Block:
+	       sig
+		  type ('a, 'b, 'c) t = ('a, 'b, 'c) ?.Socket.Block.t
+		  type ('a, 'b) u = ('a, 'a option, 'b) ?.Socket.Block.t
+		  val may: ('a, 'b, 'a) ?.Socket.Block.t
+		  val non: ('a, 'b, 'b) ?.Socket.Block.t
+	       end
+	    structure Desc:
+	       sig
+		  type t = ?.Socket.Desc.t
+		  val == : (?.Socket.Desc.t * ?.Socket.Desc.t) -> bool
+	       end
+	    structure Option:
+	       sig
+		  type ro = ?.Socket.Option.ro
+		  type rw = ?.Socket.Option.rw
+		  type ('a, 'b, 'c, 'd) t = ('a, 'b, 'c, 'd) ?.Socket.Option.t
+		  val atmark: (bool,
+			       'a,
+			       ?.Socket.Type.active ?.Socket.Type.stream,
+			       ?.Socket.Option.ro) ?.Socket.Option.t
+		  val broadcast: (bool, 'a, 'b, ?.Socket.Option.rw) ?.Socket.Option.t
+		  val debug: (bool, 'a, 'b, ?.Socket.Option.rw) ?.Socket.Option.t
+		  val dontRoute: (bool, 'a, 'b, ?.Socket.Option.rw) ?.Socket.Option.t
+		  val error: (bool, 'a, 'b, ?.Socket.Option.ro) ?.Socket.Option.t
+		  val keepAlive: (bool, 'a, 'b, ?.Socket.Option.rw) ?.Socket.Option.t
+		  val linger: (Time.t option, 'a, 'b, ?.Socket.Option.rw) ?.Socket.Option.t
+		  val nRead: (Int32.t, 'a, 'b, ?.Socket.Option.ro) ?.Socket.Option.t
+		  val noDelay: (bool,
+				?.Family.inet,
+				'a ?.Socket.Type.stream,
+				?.Socket.Option.rw) ?.Socket.Option.t
+		  val oobInline: (bool, 'a, 'b, ?.Socket.Option.rw) ?.Socket.Option.t
+		  val rcvBuf: (Int32.t, 'a, 'b, ?.Socket.Option.rw) ?.Socket.Option.t
+		  val reuseAddr: (bool, 'a, 'b, ?.Socket.Option.rw) ?.Socket.Option.t
+		  val sndBuf: (Int32.t, 'a, 'b, ?.Socket.Option.rw) ?.Socket.Option.t
+		  val ty: (?.Socket.Type.unknown ?.Socket.Type.t,
+			   'a,
+			   'b,
+			   ?.Socket.Option.ro) ?.Socket.Option.t
+	       end
+	    structure Receive:
+	       sig
+		  val receive: (('a, 'b, 'c, 'd) ?.Socket.Receive.From.t
+				* ('a, 'e, 'f, 'g, 'h, 'b, 'c) ?.Socket.Receive.To.t
+				* ('a,
+				   (Int32.t * 'a ?.Socket.Address.t),
+				   Int32.t,
+				   (Word8.t ?.vector * 'a ?.Socket.Address.t),
+				   Word8.t ?.vector,
+				   'e,
+				   'f,
+				   'g,
+				   'h) ?.Socket.Receive.Block.t
+				* ?.Socket.Receive.Flag.t list)
+			       -> 'd
+		  structure Block:
+		     sig
+			type ('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i) t = ('a,
+								       'b,
+								       'c,
+								       'd,
+								       'e,
+								       'f,
+								       'g,
+								       'h,
+								       'i) ?.Socket.Receive.Block.t
+			val may: ('a, 'b, 'c, 'd, 'e, 'b, 'c, 'd, 'e) ?.Socket.Receive.Block.t
+			val non: ('a,
+				  'b,
+				  'c,
+				  'd,
+				  'e,
+				  'b option,
+				  'c option,
+				  'd option,
+				  'e option) ?.Socket.Receive.Block.t
+		     end
+		  structure Flag:
+		     sig
+			type t = ?.Socket.Receive.Flag.t
+			val outOfBand: ?.Socket.Receive.Flag.t
+			val peek: ?.Socket.Receive.Flag.t
+		     end
+		  structure From:
+		     sig
+			type ('a, 'b, 'c, 'd) t = ('a, 'b, 'c, 'd) ?.Socket.Receive.From.t
+			val dgram: ('a, ?.Socket.Type.dgram) ?.Socket.sock
+				   -> ('a, 'b, 'c, 'b) ?.Socket.Receive.From.t
+			val stream: ('a,
+				     ?.Socket.Type.active ?.Socket.Type.stream) ?.Socket.sock
+				    -> ('a, 'b, 'c, 'c) ?.Socket.Receive.From.t
+		     end
+		  structure To:
+		     sig
+			type ('a, 'b, 'c, 'd, 'e, 'f, 'g) t = ('a,
+							       'b,
+							       'c,
+							       'd,
+							       'e,
+							       'f,
+							       'g) ?.Socket.Receive.To.t
+			val array: Word8.t ?.Sequence.Slice.t
+				   -> ('a, 'b, 'c, 'd, 'e, 'b, 'c) ?.Socket.Receive.To.t
+			val vector: {numBytes: Int32.t}
+				    -> ('a, 'b, 'c, 'd, 'e, 'd, 'e) ?.Socket.Receive.To.t
+		     end
+	       end
+	    structure Send:
+	       sig
+		  val send: (?.Socket.Send.From.t
+			     * ('a, 'b, 'c, 'd) ?.Socket.Send.To.t
+			     * ('a, unit, Int32.t, bool, Int32.t option, 'b, 'c) ?.Socket.Send.Block.t
+			     * ?.Socket.Send.Flag.t list)
+			    -> 'd
+		  structure Block:
+		     sig
+			type ('a, 'b, 'c, 'd, 'e, 'f, 'g) t = ('a,
+							       'b,
+							       'c,
+							       'd,
+							       'e,
+							       'f,
+							       'g) ?.Socket.Send.Block.t
+			val may: ('a, 'b, 'c, 'd, 'e, 'b, 'c) ?.Socket.Send.Block.t
+			val non: ('a, 'b, 'c, 'd, 'e, 'd, 'e) ?.Socket.Send.Block.t
+		     end
+		  structure Flag:
+		     sig
+			type t = ?.Socket.Send.Flag.t
+			val dontRoute: ?.Socket.Send.Flag.t
+			val outOfBand: ?.Socket.Send.Flag.t
+		     end
+		  structure From:
+		     sig
+			type t = ?.Socket.Send.From.t
+			val array: Word8.t ?.Sequence.Slice.t
+				   -> ?.Socket.Send.From.t
+			val vector: Word8.t ?.Sequence.Slice.t
+				    -> ?.Socket.Send.From.t
+		     end
+		  structure To:
+		     sig
+			type ('a, 'b, 'c, 'd) t = ('a, 'b, 'c, 'd) ?.Socket.Send.To.t
+			val dgram: (('a, ?.Socket.Type.dgram) ?.Socket.sock
+				    * 'a ?.Socket.Address.t)
+				   -> ('a, 'b, 'c, 'b) ?.Socket.Send.To.t
+			val stream: ('a,
+				     ?.Socket.Type.active ?.Socket.Type.stream) ?.Socket.sock
+				    -> ('a, 'b, 'c, 'c) ?.Socket.Send.To.t
+		     end
+	       end
+	    structure ShutdownMode:
+	       sig
+		  type t = ?.Socket.ShutdownMode.t
+		  val noRecvs: ?.Socket.ShutdownMode.t
+		  val noRecvsSends: ?.Socket.ShutdownMode.t
+		  val noSends: ?.Socket.ShutdownMode.t
+	       end
+	    structure Type:
+	       sig
+		  type active = ?.Socket.Type.active
+		  type activeStream = ?.Socket.Type.active ?.Socket.Type.stream
+		  type dgram = ?.Socket.Type.dgram
+		  type passive = ?.Socket.Type.passive
+		  type passiveStream = ?.Socket.Type.passive ?.Socket.Type.stream
+		  type 'a stream = 'a ?.Socket.Type.stream
+		  type 'a t = 'a ?.Socket.Type.t
+		  type unknown = ?.Socket.Type.unknown
+		  val == : ('a ?.Socket.Type.t * 'a ?.Socket.Type.t) -> bool
+		  val all: unit
+			   -> (?.Socket.Type.unknown ?.Socket.Type.t
+			       * {name: string}) ?.vector
+		  val dgram: ?.Socket.Type.dgram ?.Socket.Type.t
+		  val ofString: string
+				-> ?.Socket.Type.unknown ?.Socket.Type.t option
+		  val stream: 'a ?.Socket.Type.stream ?.Socket.Type.t
+		  val toString: 'a ?.Socket.Type.t -> string
+	       end
+	 end
+   end
+signature OPTION = 
+   sig
+      datatype 'a t = None | Some of 'a
+      val isNone: 'a ?.t -> bool
+      val isSome: 'a ?.t -> bool
+      val map: ('a ?.t * ('a -> 'b)) -> 'b ?.t
+      val toSeq: 'a ?.t -> 'a seq
+      val valOf: 'a ?.t -> 'a
+   end
+signature ORDER = 
+   sig
+      datatype t = Equal | Greater | Less
+   end
+signature OUT = 
+   sig
+      type t = ?.t
+      val close: ?.t -> unit
+      val error: ?.t
+      val flush: ?.t -> unit
+      val newline: ?.t -> unit
+      val put: (?.t * string) -> unit
+      val put1: (?.t * char) -> unit
+      val puts: (?.t * string seq) -> unit
+      val standard: ?.t
+   end
+signature PACKABLE_REAL = 
+   sig
+      type t = ?.t
+      val != : (?.t * ?.t) -> bool
+      val * : (?.t * ?.t) -> ?.t
+      val + : (?.t * ?.t) -> ?.t
+      val - : (?.t * ?.t) -> ?.t
+      val / : (?.t * ?.t) -> ?.t
+      val < : (?.t * ?.t) -> bool
+      val <= : (?.t * ?.t) -> bool
+      val == : (?.t * ?.t) -> bool
+      val > : (?.t * ?.t) -> bool
+      val >= : (?.t * ?.t) -> bool
+      val ?= : (?.t * ?.t) -> bool
+      val abs: ?.t -> ?.t
+      val acos: ?.t -> ?.t
+      val asin: ?.t -> ?.t
+      val atan: ?.t -> ?.t
+      val atan2: (?.t * ?.t) -> ?.t
+      val ceil: ?.t -> Int32.t
+      val checkFloat: ?.t -> ?.t
+      val class: ?.t -> ?.Class.t
+      val compare: (?.t * ?.t) -> order
+      val copySign: (?.t * ?.t) -> ?.t
+      val cos: ?.t -> ?.t
+      val cosh: ?.t -> ?.t
+      val e: ?.t
+      val exp: ?.t -> ?.t
+      val floor: ?.t -> Int32.t
+      val format: (?.t * ?.Format.t) -> string
+      val isFinite: ?.t -> bool
+      val isNan: ?.t -> bool
+      val isNormal: ?.t -> bool
+      val ln: ?.t -> ?.t
+      val log10: ?.t -> ?.t
+      val max: (?.t * ?.t) -> ?.t
+      val maxFinite: ?.t
+      val min: (?.t * ?.t) -> ?.t
+      val minNormalPos: ?.t
+      val minPos: ?.t
+      val negInf: ?.t
+      val nextAfter: (?.t * ?.t) -> ?.t
+      val ofBytes: (Word8.t ?.vector * ?.Endian.t) -> ?.t
+      val ofDecimal: {class: ?.Class.t,
+		      digits: Int32.t list,
+		      exp: Int32.t,
+		      sign: bool}
+		     -> ?.t option
+      val ofInt: Int32.t -> ?.t
+      val ofLarge: (Real64.t * ?.RoundingMode.t) -> ?.t
+      val ofLargeInt: IntInf.t -> ?.t
+      val ofManExp: {exp: Int32.t, man: ?.t} -> ?.t
+      val ofString: string -> ?.t option
+      val pi: ?.t
+      val posInf: ?.t
+      val pow: (?.t * ?.t) -> ?.t
+      val precision: Int32.t
+      val radix: Int32.t
+      val realCeil: ?.t -> ?.t
+      val realFloor: ?.t -> ?.t
+      val realMod: ?.t -> ?.t
+      val realRound: ?.t -> ?.t
+      val realTrunc: ?.t -> ?.t
+      val rem: (?.t * ?.t) -> ?.t
+      val round: ?.t -> Int32.t
+      val sameSign: (?.t * ?.t) -> bool
+      val scanner: char seq -> (?.t * char seq) option
+      val sign: ?.t -> Int32.t
+      val signBit: ?.t -> bool
+      val sin: ?.t -> ?.t
+      val sinh: ?.t -> ?.t
+      val split: ?.t -> {frac: ?.t, whole: ?.t}
+      val sqrt: ?.t -> ?.t
+      val subArr: (Word8.t ?.array * Int32.t * ?.Endian.t) -> ?.t
+      val subVec: (Word8.t ?.vector * Int32.t * ?.Endian.t) -> ?.t
+      val tan: ?.t -> ?.t
+      val tanh: ?.t -> ?.t
+      val toBytes: (?.t * ?.Endian.t) -> Word8.t ?.vector
+      val toDecimal: ?.t
+		     -> {class: ?.Class.t,
+			 digits: Int32.t list,
+			 exp: Int32.t,
+			 sign: bool}
+      val toInt: (?.t * ?.RoundingMode.t) -> Int32.t
+      val toLarge: ?.t -> Real64.t
+      val toLargeInt: (?.t * ?.RoundingMode.t) -> IntInf.t
+      val toManExp: ?.t -> {exp: Int32.t, man: ?.t}
+      val toString: ?.t -> string
+      val trunc: ?.t -> Int32.t
+      val unordered: (?.t * ?.t) -> bool
+      val update: (Word8.t ?.array * Int32.t * ?.t * ?.Endian.t) -> unit
+      val ~ : ?.t -> ?.t
+      structure Class:
+	 sig
+	    datatype t = Inf | Nan | Normal | Subnormal | Zero
+	 end
+      structure Decimal:
+	 sig
+	    eqtype t = {class: ?.Class.t,
+			digits: Int32.t list,
+			exp: Int32.t,
+			sign: bool}
+	    val ofString: string
+			  -> {class: ?.Class.t,
+			      digits: Int32.t list,
+			      exp: Int32.t,
+			      sign: bool} option
+	    val scanner: char seq
+			 -> ({class: ?.Class.t,
+			      digits: Int32.t list,
+			      exp: Int32.t,
+			      sign: bool}
+			     * char seq) option
+	    val toString: {class: ?.Class.t,
+			   digits: Int32.t list,
+			   exp: Int32.t,
+			   sign: bool}
+			  -> string
+	 end
+      structure Format:
+	 sig
+	    type t = ?.Format.t
+	    val exact: ?.Format.t
+	    val fix: Int32.t -> ?.Format.t
+	    val gen: Int32.t -> ?.Format.t
+	    val sci: Int32.t -> ?.Format.t
+	 end
+      structure RoundingMode:
+	 sig
+	    type t = ?.RoundingMode.t
+	    val get: unit -> ?.RoundingMode.t
+	    val nearest: ?.RoundingMode.t
+	    val negInf: ?.RoundingMode.t
+	    val posInf: ?.RoundingMode.t
+	    val set: ?.RoundingMode.t -> unit
+	    val zero: ?.RoundingMode.t
+	 end
+   end
+signature PACKABLE_WORD = 
+   sig
+      type t = ?.t
+      val * : (?.t * ?.t) -> ?.t
+      val + : (?.t * ?.t) -> ?.t
+      val - : (?.t * ?.t) -> ?.t
+      val < : (?.t * ?.t) -> bool
+      val << : (?.t * Word32.t) -> ?.t
+      val <= : (?.t * ?.t) -> bool
+      val == : (?.t * ?.t) -> bool
+      val > : (?.t * ?.t) -> bool
+      val >= : (?.t * ?.t) -> bool
+      val >> : (?.t * Word32.t) -> ?.t
+      val andb: (?.t * ?.t) -> ?.t
+      val compare: (?.t * ?.t) -> order
+      val div: (?.t * ?.t) -> ?.t
+      val mod: (?.t * ?.t) -> ?.t
+      val notb: ?.t -> ?.t
+      val ofLarge: Word64.t -> ?.t
+      val ofString: string -> ?.t option
+      val ofStringRadix: (string * Radix.t) -> ?.t option
+      val orb: (?.t * ?.t) -> ?.t
+      val scanner: Radix.t -> (char seq -> (?.t * char seq) option)
+      val subArr: (Word8.t ?.array * Int32.t * ?.Endian.t) -> ?.t
+      val subVec: (Word8.t ?.vector * Int32.t * ?.Endian.t) -> ?.t
+      val toLarge: ?.t -> Word64.t
+      val toLargeX: ?.t -> Word64.t
+      val toString: ?.t -> string
+      val toStringRadix: (?.t * Radix.t) -> string
+      val update: (Word8.t ?.array * Int32.t * ?.t * ?.Endian.t) -> unit
+      val xorb: (?.t * ?.t) -> ?.t
+      val ~>> : (?.t * Word32.t) -> ?.t
+   end
+signature PATH = 
+   sig
+      eqtype t = string
+      val append: (string * string) -> string
+      val base: string -> string
+      val dir: string -> string
+      val ext: string -> string option
+      val file: string -> string
+      val full: string -> string
+      val getParent: string -> string
+      val getVolume: string -> string
+      val isAbsolute: string -> bool
+      val isCanonical: string -> bool
+      val isDir: string -> bool
+      val isLink: string -> bool
+      val isRelative: string -> bool
+      val isRoot: string -> bool
+      val joinBaseExt: {base: string, ext: string option} -> string
+      val joinDirFile: {dir: string, file: string} -> string
+      val mkAbsolute: (string * {relativeTo: string}) -> string
+      val mkCanonical: string -> string
+      val mkRelative: (string * {relativeTo: string}) -> string
+      val ofPieces: ?.Pieces.t -> string
+      val ofUnix: string -> string
+      val readLink: string -> string
+      val real: string -> string
+      val splitBaseExt: string -> {base: string, ext: string option}
+      val splitDirFile: string -> {dir: string, file: string}
+      val toPieces: string -> ?.Pieces.t
+      val toUnix: string -> string
+      structure Arc:
+	 sig
+	    eqtype t = string
+	    val current: string
+	    val parent: string
+	 end
+      structure Pieces:
+	 sig
+	    datatype t = T of {arcs: string list, isAbs: bool, volume: string}
+	 end
+      structure Volume:
+	 sig
+	    eqtype t = string
+	    val isValid: (string * {isAbs: bool}) -> bool
+	 end
+   end
+signature POLL = 
+   sig
+      val poll: (?.Desc.t list * Time.t option) -> ?.Info.t list
+      structure Desc:
+	 sig
+	    type t = ?.Desc.t
+	    exception Poll
+	    val addIn: ?.Desc.t -> ?.Desc.t
+	    val addOut: ?.Desc.t -> ?.Desc.t
+	    val addPri: ?.Desc.t -> ?.Desc.t
+	    val ofIO: Int32.t -> ?.Desc.t option
+	    val toIO: ?.Desc.t -> Int32.t
+	 end
+      structure Info:
+	 sig
+	    type t = ?.Info.t
+	    val isIn: ?.Info.t -> bool
+	    val isOut: ?.Info.t -> bool
+	    val isPri: ?.Info.t -> bool
+	    val toDesc: ?.Info.t -> ?.Desc.t
+	 end
+   end
+signature POSIX = 
+   sig
+      val access: (string * ?.AccessMode.t list) -> bool
+      val alarm: Time.t -> Time.t
+      val cfgetispeed: ?.Termios.t -> ?.Termios.Speed.t
+      val cfgetospeed: ?.Termios.t -> ?.Termios.Speed.t
+      val cfsetispeed: (?.Termios.t * ?.Termios.Speed.t) -> ?.Termios.t
+      val cfsetospeed: (?.Termios.t * ?.Termios.Speed.t) -> ?.Termios.t
+      val chdir: string -> unit
+      val chmod: (string * ?.Mode.t) -> unit
+      val chown: (string * ?.Uid.t * ?.Gid.t) -> unit
+      val close: ?.FileDesc.t -> unit
+      val closedir: ?.DirStream.t -> unit
+      val creat: (string * ?.Mode.t) -> ?.FileDesc.t
+      val createf: (string * ?.OpenMode.t * ?.OpenFlags.t * ?.Mode.t)
+		   -> ?.FileDesc.t
+      val ctermid: unit -> string
+      val dup: ?.FileDesc.t -> ?.FileDesc.t
+      val dup2: {new: ?.FileDesc.t, old: ?.FileDesc.t} -> unit
+      val environ: unit -> string list
+      val exec: (string * string list) -> 'a
+      val exece: (string * string list * string list) -> 'a
+      val execp: (string * string list) -> 'a
+      val exit: Word8.t -> 'a
+      val fchmod: (?.FileDesc.t * ?.Mode.t) -> unit
+      val fchown: (?.FileDesc.t * ?.Uid.t * ?.Gid.t) -> unit
+      val fcntl: (?.FileDesc.t * ('a, 'b) ?.Fcntl.t * 'a) -> 'b
+      val fork: unit -> ?.Pid.t option
+      val fpathconf: (?.FileDesc.t * string) -> Word64.t option
+      val fstat: ?.FileDesc.t -> ?.Stat.t
+      val fsync: ?.FileDesc.t -> unit
+      val ftruncate: (?.FileDesc.t * Int64.t) -> unit
+      val getcwd: unit -> string
+      val getegid: unit -> ?.Gid.t
+      val getenv: string -> string option
+      val geteuid: unit -> ?.Uid.t
+      val getgid: unit -> ?.Gid.t
+      val getgrgid: ?.Gid.t -> ?.Group.t
+      val getgrnam: string -> ?.Group.t
+      val getgroups: unit -> ?.Gid.t list
+      val getlogin: unit -> string
+      val getpgrp: unit -> ?.Pid.t
+      val getpid: unit -> ?.Pid.t
+      val getppid: unit -> ?.Pid.t
+      val getpwnam: string -> ?.Passwd.t
+      val getpwuid: ?.Uid.t -> ?.Passwd.t
+      val getuid: unit -> ?.Uid.t
+      val isatty: ?.FileDesc.t -> bool
+      val kill: (?.KillArg.t * ?.Signal.t) -> unit
+      val link: {new: string, old: string} -> unit
+      val lseek: (?.FileDesc.t * Int64.t * ?.Whence.t) -> Int64.t
+      val lstat: string -> ?.Stat.t
+      val mkdir: (string * ?.Mode.t) -> unit
+      val mkfifo: (string * ?.Mode.t) -> unit
+      val opendir: string -> ?.DirStream.t
+      val openf: (string * ?.OpenMode.t * ?.OpenFlags.t) -> ?.FileDesc.t
+      val pathconf: (string * string) -> Word64.t option
+      val pause: unit -> unit
+      val pipe: unit -> {infd: ?.FileDesc.t, outfd: ?.FileDesc.t}
+      val readArr: (?.FileDesc.t * Word8.t ?.Sequence.Slice.t) -> Int32.t
+      val readVec: (?.FileDesc.t * Int32.t) -> Word8.t ?.vector
+      val readdir: ?.DirStream.t -> string option
+      val readlink: string -> string
+      val rename: {new: string, old: string} -> unit
+      val rewinddir: ?.DirStream.t -> unit
+      val rmdir: string -> unit
+      val setgid: ?.Gid.t -> unit
+      val setpgid: {pgid: ?.Pid.t option, pid: ?.Pid.t option} -> unit
+      val setsid: unit -> ?.Pid.t
+      val setuid: ?.Uid.t -> unit
+      val sleep: Time.t -> Time.t
+      val stat: string -> ?.Stat.t
+      val symlink: {new: string, old: string} -> unit
+      val sysconf: string -> Word64.t
+      val tcdrain: ?.FileDesc.t -> unit
+      val tcflow: (?.FileDesc.t * ?.FlowAction.t) -> unit
+      val tcflush: (?.FileDesc.t * ?.QueueSel.t) -> unit
+      val tcgetattr: ?.FileDesc.t -> ?.Termios.t
+      val tcgetpgrp: ?.FileDesc.t -> ?.Pid.t
+      val tcsendbreak: (?.FileDesc.t * Int32.t) -> unit
+      val tcsetattr: (?.FileDesc.t * ?.SetAction.t * ?.Termios.t) -> unit
+      val tcsetpgrp: (?.FileDesc.t * ?.Pid.t) -> unit
+      val time: unit -> Time.t
+      val times: unit
+		 -> {cstime: Time.t,
+		     cutime: Time.t,
+		     elapsed: Time.t,
+		     stime: Time.t,
+		     utime: Time.t}
+      val ttyname: ?.FileDesc.t -> string
+      val umask: ?.Mode.t -> ?.Mode.t
+      val uname: unit -> (string * string) list
+      val unlink: string -> unit
+      val utime: (string * {actime: Time.t, modtime: Time.t} option) -> unit
+      val wait: unit -> (?.Pid.t * ?.ExitStatus.t)
+      val waitpid: (?.WaitPidArg.t * ?.WaitPidFlags.t list)
+		   -> (?.Pid.t * ?.ExitStatus.t)
+      val waitpidNohang: (?.WaitPidArg.t * ?.WaitPidFlags.t list)
+			 -> (?.Pid.t * ?.ExitStatus.t) option
+      val writeArr: (?.FileDesc.t * Word8.t ?.Sequence.Slice.t) -> Int32.t
+      val writeVec: (?.FileDesc.t * Word8.t ?.Sequence.Slice.t) -> Int32.t
+      structure AccessMode:
+	 sig
+	    type t = ?.AccessMode.t
+	    val exec: ?.AccessMode.t
+	    val read: ?.AccessMode.t
+	    val write: ?.AccessMode.t
+	 end
+      structure Dev:
+	 sig
+	    type t = ?.Dev.t
+	    val ofWord: Word64.t -> ?.Dev.t
+	    val toWord: ?.Dev.t -> Word64.t
+	 end
+      structure DirStream:
+	 sig
+	    type t = ?.DirStream.t
+	 end
+      structure Error:
+	 sig
+	    type t = ?.Error.t
+	    val acces: ?.Error.t
+	    val again: ?.Error.t
+	    val badf: ?.Error.t
+	    val badmsg: ?.Error.t
+	    val busy: ?.Error.t
+	    val canceled: ?.Error.t
+	    val child: ?.Error.t
+	    val deadlk: ?.Error.t
+	    val dom: ?.Error.t
+	    val exist: ?.Error.t
+	    val fault: ?.Error.t
+	    val fbig: ?.Error.t
+	    val inprogress: ?.Error.t
+	    val intr: ?.Error.t
+	    val inval: ?.Error.t
+	    val io: ?.Error.t
+	    val isdir: ?.Error.t
+	    val loop: ?.Error.t
+	    val message: ?.Error.t -> string
+	    val mfile: ?.Error.t
+	    val mlink: ?.Error.t
+	    val msgsize: ?.Error.t
+	    val name: ?.Error.t -> string
+	    val nametoolong: ?.Error.t
+	    val nfile: ?.Error.t
+	    val nodev: ?.Error.t
+	    val noent: ?.Error.t
+	    val noexec: ?.Error.t
+	    val nolck: ?.Error.t
+	    val nomem: ?.Error.t
+	    val nospc: ?.Error.t
+	    val nosys: ?.Error.t
+	    val notdir: ?.Error.t
+	    val notempty: ?.Error.t
+	    val notsup: ?.Error.t
+	    val notty: ?.Error.t
+	    val nxio: ?.Error.t
+	    val ofName: string -> ?.Error.t option
+	    val ofWord: Word64.t -> ?.Error.t
+	    val perm: ?.Error.t
+	    val pipe: ?.Error.t
+	    val range: ?.Error.t
+	    val rofs: ?.Error.t
+	    val spipe: ?.Error.t
+	    val srch: ?.Error.t
+	    val toWord: ?.Error.t -> Word64.t
+	    val toobig: ?.Error.t
+	    val xdev: ?.Error.t
+	 end
+      structure ExitStatus:
+	 sig
+	    datatype t = Exited
+		       | ExitStatus of Word8.t
+		       | Signaled of ?.Signal.t
+		       | Stopped of ?.Signal.t
+	    val ofStatus: Int32.t -> ?.ExitStatus.t
+	 end
+      structure Fcntl:
+	 sig
+	    type ('a, 'b) t = ('a, 'b) ?.Fcntl.t
+	    val dupfd: (?.FileDesc.t, ?.FileDesc.t) ?.Fcntl.t
+	    val getfd: (unit, ?.FileDescFlags.t) ?.Fcntl.t
+	    val getfl: (unit, (?.FileStatusFlags.t * ?.OpenMode.t)) ?.Fcntl.t
+	    val getlk: (?.Lock.t, ?.Lock.t) ?.Fcntl.t
+	    val setfd: (?.FileDescFlags.t, unit) ?.Fcntl.t
+	    val setfl: (?.FileStatusFlags.t, unit) ?.Fcntl.t
+	    val setlk: (?.Lock.t, ?.Lock.t) ?.Fcntl.t
+	    val setlkw: (?.Lock.t, ?.Lock.t) ?.Fcntl.t
+	 end
+      structure FileDesc:
+	 sig
+	    type t = ?.FileDesc.t
+	    val ofIODesc: Int32.t -> ?.FileDesc.t option
+	    val ofWord: Word64.t -> ?.FileDesc.t
+	    val stderr: ?.FileDesc.t
+	    val stdin: ?.FileDesc.t
+	    val stdout: ?.FileDesc.t
+	    val toIODesc: ?.FileDesc.t -> Int32.t
+	    val toWord: ?.FileDesc.t -> Word64.t
+	 end
+      structure FileDescFlags:
+	 sig
+	    type t = ?.FileDescFlags.t
+	    val all: ?.FileDescFlags.t
+	    val cloexec: ?.FileDescFlags.t
+	    val difference: (?.FileDescFlags.t * ?.FileDescFlags.t)
+			    -> ?.FileDescFlags.t
+	    val doIntersect: (?.FileDescFlags.t * ?.FileDescFlags.t) -> bool
+	    val fromWord: Word64.t -> ?.FileDescFlags.t
+	    val intersect: ?.FileDescFlags.t list -> ?.FileDescFlags.t
+	    val isSubset: (?.FileDescFlags.t * ?.FileDescFlags.t) -> bool
+	    val toWord: ?.FileDescFlags.t -> Word64.t
+	    val union: ?.FileDescFlags.t list -> ?.FileDescFlags.t
+	 end
+      structure FileStatusFlags:
+	 sig
+	    type t = ?.FileStatusFlags.t
+	    val all: ?.FileStatusFlags.t
+	    val append: ?.FileStatusFlags.t
+	    val difference: (?.FileStatusFlags.t * ?.FileStatusFlags.t)
+			    -> ?.FileStatusFlags.t
+	    val doIntersect: (?.FileStatusFlags.t * ?.FileStatusFlags.t) -> bool
+	    val fromWord: Word64.t -> ?.FileStatusFlags.t
+	    val intersect: ?.FileStatusFlags.t list -> ?.FileStatusFlags.t
+	    val isSubset: (?.FileStatusFlags.t * ?.FileStatusFlags.t) -> bool
+	    val nonblock: ?.FileStatusFlags.t
+	    val sync: ?.FileStatusFlags.t
+	    val toWord: ?.FileStatusFlags.t -> Word64.t
+	    val union: ?.FileStatusFlags.t list -> ?.FileStatusFlags.t
+	 end
+      structure FlowAction:
+	 sig
+	    type t = ?.FlowAction.t
+	    val ioff: ?.FlowAction.t
+	    val ion: ?.FlowAction.t
+	    val ooff: ?.FlowAction.t
+	    val oon: ?.FlowAction.t
+	 end
+      structure Gid:
+	 sig
+	    type t = ?.Gid.t
+	    val ofWord: Word64.t -> ?.Gid.t
+	    val toWord: ?.Gid.t -> Word64.t
+	 end
+      structure Group:
+	 sig
+	    type t = ?.Group.t
+	    val gid: ?.Group.t -> ?.Gid.t
+	    val members: ?.Group.t -> string list
+	    val name: ?.Group.t -> string
+	 end
+      structure Ino:
+	 sig
+	    type t = ?.Ino.t
+	    val ofWord: Word64.t -> ?.Ino.t
+	    val toWord: ?.Ino.t -> Word64.t
+	 end
+      structure KillArg:
+	 sig
+	    type t = ?.KillArg.t
+	    val group: ?.Pid.t -> ?.KillArg.t
+	    val proc: ?.Pid.t -> ?.KillArg.t
+	    val sameGroup: ?.KillArg.t
+	 end
+      structure Lock:
+	 sig
+	    type t = ?.Lock.t
+	    val len: ?.Lock.t -> Int64.t
+	    val make: {len: Int64.t,
+		       pid: ?.Pid.t option,
+		       start: Int64.t,
+		       ty: ?.Lock.Type.t,
+		       whence: ?.Whence.t}
+		      -> ?.Lock.t
+	    val pid: ?.Lock.t -> ?.Pid.t option
+	    val start: ?.Lock.t -> Int64.t
+	    val ty: ?.Lock.t -> ?.Lock.Type.t
+	    val whence: ?.Lock.t -> ?.Whence.t
+	    structure Type:
+	       sig
+		  type t = ?.Lock.Type.t
+		  val read: ?.Lock.Type.t
+		  val unlocked: ?.Lock.Type.t
+		  val write: ?.Lock.Type.t
+	       end
+	 end
+      structure Mode:
+	 sig
+	    type t = ?.Mode.t
+	    val all: ?.Mode.t
+	    val difference: (?.Mode.t * ?.Mode.t) -> ?.Mode.t
+	    val doIntersect: (?.Mode.t * ?.Mode.t) -> bool
+	    val fromWord: Word64.t -> ?.Mode.t
+	    val intersect: ?.Mode.t list -> ?.Mode.t
+	    val irgrp: ?.Mode.t
+	    val iroth: ?.Mode.t
+	    val irusr: ?.Mode.t
+	    val irwxg: ?.Mode.t
+	    val irwxo: ?.Mode.t
+	    val irwxu: ?.Mode.t
+	    val isSubset: (?.Mode.t * ?.Mode.t) -> bool
+	    val isgid: ?.Mode.t
+	    val isuid: ?.Mode.t
+	    val iwgrp: ?.Mode.t
+	    val iwoth: ?.Mode.t
+	    val iwusr: ?.Mode.t
+	    val ixgrp: ?.Mode.t
+	    val ixoth: ?.Mode.t
+	    val ixusr: ?.Mode.t
+	    val toWord: ?.Mode.t -> Word64.t
+	    val union: ?.Mode.t list -> ?.Mode.t
+	 end
+      structure OpenFlags:
+	 sig
+	    type t = ?.OpenFlags.t
+	    val all: ?.OpenFlags.t
+	    val append: ?.OpenFlags.t
+	    val difference: (?.OpenFlags.t * ?.OpenFlags.t) -> ?.OpenFlags.t
+	    val doIntersect: (?.OpenFlags.t * ?.OpenFlags.t) -> bool
+	    val excl: ?.OpenFlags.t
+	    val fromWord: Word64.t -> ?.OpenFlags.t
+	    val intersect: ?.OpenFlags.t list -> ?.OpenFlags.t
+	    val isSubset: (?.OpenFlags.t * ?.OpenFlags.t) -> bool
+	    val noctty: ?.OpenFlags.t
+	    val nonblock: ?.OpenFlags.t
+	    val sync: ?.OpenFlags.t
+	    val toWord: ?.OpenFlags.t -> Word64.t
+	    val trunc: ?.OpenFlags.t
+	    val union: ?.OpenFlags.t list -> ?.OpenFlags.t
+	 end
+      structure OpenMode:
+	 sig
+	    type t = ?.OpenMode.t
+	    val read: ?.OpenMode.t
+	    val readWrite: ?.OpenMode.t
+	    val write: ?.OpenMode.t
+	 end
+      structure Passwd:
+	 sig
+	    type t = ?.Passwd.t
+	    val gid: ?.Passwd.t -> ?.Gid.t
+	    val home: ?.Passwd.t -> string
+	    val name: ?.Passwd.t -> string
+	    val shell: ?.Passwd.t -> string
+	    val uid: ?.Passwd.t -> ?.Uid.t
+	 end
+      structure Pid:
+	 sig
+	    type t = ?.Pid.t
+	    val ofWord: Word64.t -> ?.Pid.t
+	    val toWord: ?.Pid.t -> Word64.t
+	 end
+      structure QueueSel:
+	 sig
+	    type t = ?.QueueSel.t
+	    val both: ?.QueueSel.t
+	    val input: ?.QueueSel.t
+	    val output: ?.QueueSel.t
+	 end
+      structure SetAction:
+	 sig
+	    type t = ?.SetAction.t
+	    val drain: ?.SetAction.t
+	    val flush: ?.SetAction.t
+	    val now: ?.SetAction.t
+	 end
+      structure Signal:
+	 sig
+	    type t = ?.Signal.t
+	    val abrt: ?.Signal.t
+	    val alrm: ?.Signal.t
+	    val bus: ?.Signal.t
+	    val chld: ?.Signal.t
+	    val cont: ?.Signal.t
+	    val fpe: ?.Signal.t
+	    val hup: ?.Signal.t
+	    val ill: ?.Signal.t
+	    val int: ?.Signal.t
+	    val kill: ?.Signal.t
+	    val ofWord: Word64.t -> ?.Signal.t
+	    val pipe: ?.Signal.t
+	    val quit: ?.Signal.t
+	    val segv: ?.Signal.t
+	    val stop: ?.Signal.t
+	    val term: ?.Signal.t
+	    val toWord: ?.Signal.t -> Word64.t
+	    val tstp: ?.Signal.t
+	    val ttin: ?.Signal.t
+	    val ttou: ?.Signal.t
+	    val usr1: ?.Signal.t
+	    val usr2: ?.Signal.t
+	 end
+      structure Stat:
+	 sig
+	    type t = ?.Stat.t
+	    val atime: ?.Stat.t -> Time.t
+	    val ctime: ?.Stat.t -> Time.t
+	    val dev: ?.Stat.t -> ?.Dev.t
+	    val gid: ?.Stat.t -> ?.Gid.t
+	    val ino: ?.Stat.t -> ?.Ino.t
+	    val isBlk: ?.Stat.t -> bool
+	    val isChr: ?.Stat.t -> bool
+	    val isDir: ?.Stat.t -> bool
+	    val isFIFO: ?.Stat.t -> bool
+	    val isLink: ?.Stat.t -> bool
+	    val isReg: ?.Stat.t -> bool
+	    val isSock: ?.Stat.t -> bool
+	    val mode: ?.Stat.t -> ?.Mode.t
+	    val mtime: ?.Stat.t -> Time.t
+	    val nlink: ?.Stat.t -> Int32.t
+	    val size: ?.Stat.t -> Int64.t
+	    val uid: ?.Stat.t -> ?.Uid.t
+	 end
+      structure Termios:
+	 sig
+	    datatype t = T of {c: ?.Termios.C.t,
+			       cc: ?.Termios.CC.t,
+			       i: ?.Termios.I.t,
+			       ispeed: ?.Termios.Speed.t,
+			       l: ?.Termios.L.t,
+			       o: ?.Termios.O.t,
+			       ospeed: ?.Termios.Speed.t}
+	    structure C:
+	       sig
+		  type t = ?.Termios.C.t
+		  val all: ?.Termios.C.t
+		  val clocal: ?.Termios.C.t
+		  val cread: ?.Termios.C.t
+		  val cs5: ?.Termios.C.t
+		  val cs6: ?.Termios.C.t
+		  val cs7: ?.Termios.C.t
+		  val cs8: ?.Termios.C.t
+		  val csize: ?.Termios.C.t
+		  val cstopb: ?.Termios.C.t
+		  val difference: (?.Termios.C.t * ?.Termios.C.t)
+				  -> ?.Termios.C.t
+		  val doIntersect: (?.Termios.C.t * ?.Termios.C.t) -> bool
+		  val fromWord: Word64.t -> ?.Termios.C.t
+		  val hupcl: ?.Termios.C.t
+		  val intersect: ?.Termios.C.t list -> ?.Termios.C.t
+		  val isSubset: (?.Termios.C.t * ?.Termios.C.t) -> bool
+		  val parenb: ?.Termios.C.t
+		  val parodd: ?.Termios.C.t
+		  val toWord: ?.Termios.C.t -> Word64.t
+		  val union: ?.Termios.C.t list -> ?.Termios.C.t
+	       end
+	    structure CC:
+	       sig
+		  type t = ?.Termios.CC.t
+		  val eof: Int32.t
+		  val eol: Int32.t
+		  val erase: Int32.t
+		  val intr: Int32.t
+		  val kill: Int32.t
+		  val make: (Int32.t * char) list -> ?.Termios.CC.t
+		  val min: Int32.t
+		  val nccs: Int32.t
+		  val quit: Int32.t
+		  val start: Int32.t
+		  val stop: Int32.t
+		  val sub: (?.Termios.CC.t * Int32.t) -> char
+		  val susp: Int32.t
+		  val time: Int32.t
+		  val update: (?.Termios.CC.t * (Int32.t * char) list)
+			      -> ?.Termios.CC.t
+	       end
+	    structure I:
+	       sig
+		  type t = ?.Termios.I.t
+		  val all: ?.Termios.I.t
+		  val brkint: ?.Termios.I.t
+		  val difference: (?.Termios.I.t * ?.Termios.I.t)
+				  -> ?.Termios.I.t
+		  val doIntersect: (?.Termios.I.t * ?.Termios.I.t) -> bool
+		  val fromWord: Word64.t -> ?.Termios.I.t
+		  val icrnl: ?.Termios.I.t
+		  val ignbrk: ?.Termios.I.t
+		  val igncr: ?.Termios.I.t
+		  val ignpar: ?.Termios.I.t
+		  val inlcr: ?.Termios.I.t
+		  val inpck: ?.Termios.I.t
+		  val intersect: ?.Termios.I.t list -> ?.Termios.I.t
+		  val isSubset: (?.Termios.I.t * ?.Termios.I.t) -> bool
+		  val istrip: ?.Termios.I.t
+		  val ixoff: ?.Termios.I.t
+		  val ixon: ?.Termios.I.t
+		  val parmrk: ?.Termios.I.t
+		  val toWord: ?.Termios.I.t -> Word64.t
+		  val union: ?.Termios.I.t list -> ?.Termios.I.t
+	       end
+	    structure L:
+	       sig
+		  type t = ?.Termios.L.t
+		  val all: ?.Termios.L.t
+		  val difference: (?.Termios.L.t * ?.Termios.L.t)
+				  -> ?.Termios.L.t
+		  val doIntersect: (?.Termios.L.t * ?.Termios.L.t) -> bool
+		  val echo: ?.Termios.L.t
+		  val echoe: ?.Termios.L.t
+		  val echok: ?.Termios.L.t
+		  val echonl: ?.Termios.L.t
+		  val fromWord: Word64.t -> ?.Termios.L.t
+		  val icanon: ?.Termios.L.t
+		  val iexten: ?.Termios.L.t
+		  val intersect: ?.Termios.L.t list -> ?.Termios.L.t
+		  val isSubset: (?.Termios.L.t * ?.Termios.L.t) -> bool
+		  val isig: ?.Termios.L.t
+		  val noflsh: ?.Termios.L.t
+		  val toWord: ?.Termios.L.t -> Word64.t
+		  val tostop: ?.Termios.L.t
+		  val union: ?.Termios.L.t list -> ?.Termios.L.t
+	       end
+	    structure O:
+	       sig
+		  type t = ?.Termios.O.t
+		  val all: ?.Termios.O.t
+		  val difference: (?.Termios.O.t * ?.Termios.O.t)
+				  -> ?.Termios.O.t
+		  val doIntersect: (?.Termios.O.t * ?.Termios.O.t) -> bool
+		  val fromWord: Word64.t -> ?.Termios.O.t
+		  val intersect: ?.Termios.O.t list -> ?.Termios.O.t
+		  val isSubset: (?.Termios.O.t * ?.Termios.O.t) -> bool
+		  val opost: ?.Termios.O.t
+		  val toWord: ?.Termios.O.t -> Word64.t
+		  val union: ?.Termios.O.t list -> ?.Termios.O.t
+	       end
+	    structure Speed:
+	       sig
+		  type t = ?.Termios.Speed.t
+		  val b0: ?.Termios.Speed.t
+		  val b110: ?.Termios.Speed.t
+		  val b1200: ?.Termios.Speed.t
+		  val b134: ?.Termios.Speed.t
+		  val b150: ?.Termios.Speed.t
+		  val b1800: ?.Termios.Speed.t
+		  val b19200: ?.Termios.Speed.t
+		  val b200: ?.Termios.Speed.t
+		  val b2400: ?.Termios.Speed.t
+		  val b300: ?.Termios.Speed.t
+		  val b38400: ?.Termios.Speed.t
+		  val b4800: ?.Termios.Speed.t
+		  val b50: ?.Termios.Speed.t
+		  val b600: ?.Termios.Speed.t
+		  val b75: ?.Termios.Speed.t
+		  val b9600: ?.Termios.Speed.t
+		  val ofWord: Word64.t -> ?.Termios.Speed.t
+		  val toWord: ?.Termios.Speed.t -> Word64.t
+	       end
+	 end
+      structure Uid:
+	 sig
+	    type t = ?.Uid.t
+	    val ofWord: Word64.t -> ?.Uid.t
+	    val toWord: ?.Uid.t -> Word64.t
+	 end
+      structure WaitPidArg:
+	 sig
+	    type t = ?.WaitPidArg.t
+	    val anyChild: ?.WaitPidArg.t
+	    val child: ?.Pid.t -> ?.WaitPidArg.t
+	    val group: ?.Pid.t -> ?.WaitPidArg.t
+	    val sameGroup: ?.WaitPidArg.t
+	 end
+      structure WaitPidFlags:
+	 sig
+	    type t = ?.WaitPidFlags.t
+	    val all: ?.WaitPidFlags.t
+	    val difference: (?.WaitPidFlags.t * ?.WaitPidFlags.t)
+			    -> ?.WaitPidFlags.t
+	    val doIntersect: (?.WaitPidFlags.t * ?.WaitPidFlags.t) -> bool
+	    val fromWord: Word64.t -> ?.WaitPidFlags.t
+	    val intersect: ?.WaitPidFlags.t list -> ?.WaitPidFlags.t
+	    val isSubset: (?.WaitPidFlags.t * ?.WaitPidFlags.t) -> bool
+	    val toWord: ?.WaitPidFlags.t -> Word64.t
+	    val union: ?.WaitPidFlags.t list -> ?.WaitPidFlags.t
+	    val untraced: ?.WaitPidFlags.t
+	 end
+      structure Whence:
+	 sig
+	    type t = ?.Whence.t
+	    val cur: ?.Whence.t
+	    val endd: ?.Whence.t
+	    val set: ?.Whence.t
+	 end
+   end
+signature PROCESS = 
+   sig
+      val atExit: (unit -> unit) -> unit
+      val exit: ?.Status.t -> 'a
+      val getEnv: string -> string option
+      val sleep: Time.t -> unit
+      val system: string -> ?.Status.t
+      val terminate: ?.Status.t -> 'a
+      structure Status:
+	 sig
+	    type t = ?.Status.t
+	    val failure: ?.Status.t
+	    val isSuccess: ?.Status.t -> bool
+	    val success: ?.Status.t
+	 end
+   end
+signature RADIX = 
+   sig
+      type t = ?.t
+      val bin: ?.t
+      val dec: ?.t
+      val hex: ?.t
+      val oct: ?.t
+      val toString: ?.t -> string
+   end
+signature REAL = 
+   sig
+      type t = ?.t
+      val != : (?.t * ?.t) -> bool
+      val * : (?.t * ?.t) -> ?.t
+      val + : (?.t * ?.t) -> ?.t
+      val - : (?.t * ?.t) -> ?.t
+      val / : (?.t * ?.t) -> ?.t
+      val < : (?.t * ?.t) -> bool
+      val <= : (?.t * ?.t) -> bool
+      val == : (?.t * ?.t) -> bool
+      val > : (?.t * ?.t) -> bool
+      val >= : (?.t * ?.t) -> bool
+      val ?= : (?.t * ?.t) -> bool
+      val abs: ?.t -> ?.t
+      val acos: ?.t -> ?.t
+      val asin: ?.t -> ?.t
+      val atan: ?.t -> ?.t
+      val atan2: (?.t * ?.t) -> ?.t
+      val ceil: ?.t -> Int32.t
+      val checkFloat: ?.t -> ?.t
+      val class: ?.t -> ?.Class.t
+      val compare: (?.t * ?.t) -> order
+      val copySign: (?.t * ?.t) -> ?.t
+      val cos: ?.t -> ?.t
+      val cosh: ?.t -> ?.t
+      val e: ?.t
+      val exp: ?.t -> ?.t
+      val floor: ?.t -> Int32.t
+      val format: (?.t * ?.Format.t) -> string
+      val isFinite: ?.t -> bool
+      val isNan: ?.t -> bool
+      val isNormal: ?.t -> bool
+      val ln: ?.t -> ?.t
+      val log10: ?.t -> ?.t
+      val max: (?.t * ?.t) -> ?.t
+      val maxFinite: ?.t
+      val min: (?.t * ?.t) -> ?.t
+      val minNormalPos: ?.t
+      val minPos: ?.t
+      val negInf: ?.t
+      val nextAfter: (?.t * ?.t) -> ?.t
+      val ofDecimal: {class: ?.Class.t,
+		      digits: Int32.t list,
+		      exp: Int32.t,
+		      sign: bool}
+		     -> ?.t option
+      val ofInt: Int32.t -> ?.t
+      val ofLarge: (Real64.t * ?.RoundingMode.t) -> ?.t
+      val ofLargeInt: IntInf.t -> ?.t
+      val ofManExp: {exp: Int32.t, man: ?.t} -> ?.t
+      val ofString: string -> ?.t option
+      val pi: ?.t
+      val posInf: ?.t
+      val pow: (?.t * ?.t) -> ?.t
+      val precision: Int32.t
+      val radix: Int32.t
+      val realCeil: ?.t -> ?.t
+      val realFloo



More information about the MLton-commit mailing list