shithub: mc

ref: 2f39b00d65470909bee4e94ac58fe2a2be5a7050
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
	;;
}