shithub: mc

ref: ce493274718acbe4ab1562f243cacfc9d00446a0
dir: /libstd/option.myr/

View raw version
use "types.use"
use "fmt.use"
use "varargs.use"

pkg std =
	type option(@a) = union
		`Some @a
		`None
	;;

	generic try	: (v : option(@a), msg : byte[:], args : ... -> @a)
	generic tryv	: (v : option(@a), msg : byte[:], args : valist -> @a)
;;

generic try = {v, msg, args
	-> tryv(v, msg, vastart(&args))
}

generic tryv = {v, msg, ap
	match v
	| `None:	fatalv(1, msg, ap)
	| `Some a:	-> a
	;;
}