shithub: mc

ref: 30ae6dbd5eb7c7f8c9c76a32723dd33c5f90978b
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;;
	;;
}