File: try.sml

package info (click to toggle)
smlsharp 4.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 123,732 kB
  • sloc: ansic: 16,725; sh: 4,347; makefile: 2,191; java: 742; haskell: 493; ruby: 305; cpp: 284; pascal: 256; ml: 255; lisp: 141; asm: 97; sql: 74
file content (12 lines) | stat: -rw-r--r-- 403 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
structure Try : sig
  type ('a, 'b) cont
  val try : (unit -> 'a) -> ('a,'b) cont -> 'b
  val finally : ('a, (unit -> unit) -> 'a) cont
end =
struct
  datatype 'a ret = RET of 'a | ERR of exn
  type ('a,'b) cont = 'a ret -> 'b
  fun try tryFn cont = cont (RET (tryFn ()) handle e => ERR e)
  fun finally (RET x) finalFn = (finalFn () : unit; x)
    | finally (ERR e) finalFn = (finalFn (); raise e)
end