shithub: mc

Download patch

ref: 8672ce0c95bf5d6e6b721694bd0e5944d4af556b
parent: 7cc7912b2834f9f5dde95412e5302f13fb82042c
author: Ori Bernstein <[email protected]>
date: Sat Sep 30 18:18:21 EDT 2017

Replace bio.status(@t) with std.result(@t, bio.err)

	It's more consistent.

--- a/lib/bio/bio.myr
+++ b/lib/bio/bio.myr
@@ -33,19 +33,12 @@
 		close	: (-> bool)
 	;;
 
-	type status(@a) = union
+	type err = union
 		`Eof
-		`Ok @a
-		`Err ioerr
+		`Eio
+		`Ebadf
 	;;
 
-	type ioerr = union
-		`Ebadfile
-		`Ebadbuf
-		`Ebadfd
-		`Eioerr
-	;;
-
 	/* creation */
 	const mkfile	: (fd : std.fd, mode : mode	-> file#)
 	const mk	: (mode : mode, vt : vtab	-> file#)
@@ -56,36 +49,36 @@
 	const free	: (f : file# -> void)
 
 	/* basic i/o. Returns sub-buffer when applicable. */
-	const write	: (f : file#, src : byte[:]	-> status(std.size))
-	const read	: (f : file#, dst : byte[:]	-> status(byte[:]))
+	const write	: (f : file#, src : byte[:]	-> std.result(std.size, err))
+	const read	: (f : file#, dst : byte[:]	-> std.result(byte[:], err))
 	const flush	: (f : file# -> bool)
 
 	/* seeking */
-	const seek	: (f : file#, off : std.off -> std.result(std.off, ioerr))
+	const seek	: (f : file#, off : std.off -> std.result(std.off, err))
 
 	/* single unit operations */
-	const putb	: (f : file#, b : byte	-> status(std.size))
-	const putc	: (f : file#, c : char	-> status(std.size))
-	const getb	: (f : file# -> status(byte))
-	const getc	: (f : file# -> status(char))
+	const putb	: (f : file#, b : byte	-> std.result(std.size, err))
+	const putc	: (f : file#, c : char	-> std.result(std.size, err))
+	const getb	: (f : file# -> std.result(byte, err))
+	const getc	: (f : file# -> std.result(char, err))
 
 	/* peeking */
-	const peekb	: (f : file# -> status(byte))
-	const peekc	: (f : file# -> status(char))
+	const peekb	: (f : file# -> std.result(byte, err))
+	const peekc	: (f : file# -> std.result(char, err))
 
 	/* delimited read; returns freshly allocated buffer. */
-	const readln	: (f : file#	-> status(byte[:]))
-	const readto	: (f : file#, delim : byte[:]	-> status(byte[:]))
+	const readln	: (f : file#	-> std.result(byte[:], err))
+	const readto	: (f : file#, delim : byte[:]	-> std.result(byte[:], err))
 	const skipto	: (f : file#, delim : byte[:]	-> bool)
 	const skipspace	: (f : file# -> bool)
 
 	/* formatted i/o */
-	const put	: (f : file#, fmt : byte[:], args : ... -> status(std.size))
-	const putv	: (f : file#, fmt : byte[:], ap : std.valist# -> status(std.size))
+	const put	: (f : file#, fmt : byte[:], args : ... -> std.result(std.size, err))
+	const putv	: (f : file#, fmt : byte[:], ap : std.valist# -> std.result(std.size, err))
 
 	/* pkg funcs */
-	pkglocal const ensureread	: (f : file#, n : std.size -> status(std.size))
-	pkglocal const ensurewrite	: (f : file#, n : std.size -> status(std.size))
+	pkglocal const ensureread	: (f : file#, n : std.size -> std.result(std.size, err))
+	pkglocal const ensurewrite	: (f : file#, n : std.size -> std.result(std.size, err))
 ;;
 
 const Bufsz = 16*std.KiB
@@ -208,7 +201,7 @@
 	if src.len <= (f.wbuf.len - f.wend)
 		std.slcp(f.wbuf[f.wend:f.wend+src.len], src)
 		f.wend += src.len
-		-> `Ok src.len
+		-> `std.Ok src.len
 	else
 		flush(f)
 		-> writebuf(f, src)
@@ -225,7 +218,7 @@
 
 	/* Clear the error state so we can retry */
 	if f.lasterr != 0
-		-> `Err geterr(f)
+		-> `std.Err geterr(f)
 	;;
 
 	/*
@@ -235,7 +228,7 @@
 	an EOF condition.
 	*/
 	if dst.len == 0
-		-> `Ok dst
+		-> `std.Ok dst
 	;;
 	std.assert(f.mode & Rd != 0, "File is not in read mode")
 	/* 
@@ -268,7 +261,7 @@
 			d = d[n:]
 		| `std.Err err:
 			if count == 0
-				-> `Err errtype(err)
+				-> `std.Err errtype(err)
 			else
 				f.lasterr = err
 			;;
@@ -276,9 +269,9 @@
 		;;
 	;;
 	if count == 0
-		-> `Eof
+		-> `std.Err `Eof
 	else
-		-> `Ok dst[:count]
+		-> `std.Ok dst[:count]
 	;;
 }
 
@@ -289,7 +282,7 @@
 	ret = true
 	if f.mode & Wr != 0
 		match writebuf(f, f.wbuf[:f.wend])
-		| `Ok n: ret = (n == f.wend)
+		| `std.Ok n: ret = (n == f.wend)
 		| _:	ret = false
 		;;
 	;;
@@ -309,11 +302,10 @@
 /* writes a single byte to the output stream */
 const putb = {f, b
 	match ensurewrite(f, 1)
-	| `Eof: -> `Eof
-	| `Err e:	-> `Err e
-	| `Ok n:
+	| `std.Err e:	-> `std.Err e
+	| `std.Ok n:
 		f.wbuf[f.wend++] = b
-		-> `Ok 1
+		-> `std.Ok 1
 	;;
 }
 
@@ -323,12 +315,11 @@
 	
 	sz = std.charlen(c)
 	match ensurewrite(f, sz)
-	| `Eof: -> `Eof
-	| `Err e:	-> `Err e
-	| `Ok n:
+	| `std.Err e:	-> `std.Err e
+	| `std.Ok n:
 		std.encode(f.wbuf[f.wend:], c)
 		f.wend += sz
-		-> `Ok sz
+		-> `std.Ok sz
 	;;
 }
 
@@ -335,10 +326,9 @@
 /* reads a single byte from the input stream */
 const getb = {f
 	match ensureread(f, 1)
-	| `Eof:	-> `Eof
-	| `Err e:	-> `Err e
-	| `Ok n:
-		-> `Ok f.rbuf[f.rstart++]
+	| `std.Err e:	-> `std.Err e
+	| `std.Ok n:
+		-> `std.Ok f.rbuf[f.rstart++]
 	;;
 }
 
@@ -347,12 +337,11 @@
 	var c
 
 	match ensurecodepoint(f)
-	| `Eof:	-> `Eof
-	| `Err e:	-> `Err e
-	| `Ok n:
+	| `std.Err e:	-> `std.Err e
+	| `std.Ok n:
 		c = std.decode(f.rbuf[f.rstart:f.rend])
 		f.rstart += std.charlen(c)
-		-> `Ok c
+		-> `std.Ok c
 	;;
 }
 
@@ -362,9 +351,8 @@
 	var len
 
 	match ensureread(f, 1)
-	| `Eof:	-> `Eof
-	| `Err e:	-> `Err e
-	| `Ok n:
+	| `std.Err e:	-> `std.Err e
+	| `std.Ok n:
 		b = f.rbuf[f.rstart]
 		if b & 0x80 == 0	/* 0b0xxx_xxxx */
 			len = 1
@@ -408,10 +396,9 @@
 /* peeks a single byte from an input stream */
 const peekb = {f
 	match ensureread(f, 1)
-	| `Eof:	-> `Eof
-	| `Err e:	-> `Err e
-	| `Ok n:
-		-> `Ok f.rbuf[f.rstart]
+	| `std.Err e:	-> `std.Err e
+	| `std.Ok n:
+		-> `std.Ok f.rbuf[f.rstart]
 	;;
 }
 
@@ -418,10 +405,9 @@
 /* peeks a single character from a utf8 encoded input stream */
 const peekc = {f
 	match ensurecodepoint(f)
-	| `Eof:	-> `Eof
-	| `Err e:	-> `Err e
-	| `Ok n:
-		-> `Ok std.decode(f.rbuf[f.rstart:f.rend])
+	| `std.Err e:	-> `std.Err e
+	| `std.Ok n:
+		-> `std.Ok std.decode(f.rbuf[f.rstart:f.rend])
 	;;
 }
 
@@ -441,9 +427,8 @@
 /* same as readto, but drops the read data. */
 const skipto = {f, delim
 	match readdelim(f, delim, true)
-	| `Ok ign:	-> true
-	| `Eof:		-> false
-	| `Err _:		-> false
+	| `std.Ok ign:	-> true
+	| `std.Err _:		-> false
 	;;
 }
 
@@ -450,14 +435,12 @@
 const skipspace = {f
 	while true
 		match bio.peekc(f)
-		| `Ok c:
+		| `std.Ok c:
 			if !std.isspace(c)
 				break
 			;;
 			bio.getc(f)
-		| `Err e:	-> false
-		| `Eof: break
-		
+		| `std.Err e:		-> false
 		;;
 	;;
 	-> true
@@ -471,15 +454,15 @@
 	while true
 		/* get at least delimiter count of characters */
 		match ensureread(f, 1)
-		| `Ok _:
-		| `Err e:	-> `Err e
-		| `Eof:
+		| `std.Err `Eof:
 			ret = readinto(f, ret, f.rend - f.rstart)
 			if ret.len > 0
-				-> `Ok ret
+				-> `std.Ok ret
 			else
-				-> `Eof
+				-> `std.Err `Eof
 			;;
+		| `std.Err e:	-> `std.Err e
+		| `std.Ok _:
 		;;
 		/* scan for delimiter */
 		for var i = f.rstart; i < f.rend; i++
@@ -491,7 +474,7 @@
 				if c == '\r' && unwrapc(peekc(f), -1) == '\n'
 					f.rstart++
 				;;
-				-> `Ok ret
+				-> `std.Ok ret
 			;;
 :nextitergetln
 		;;
@@ -502,7 +485,7 @@
 
 const unwrapc = {cc, v
 	match cc
-	| `Ok c:	-> c
+	| `std.Ok c:	-> c
 	| _:	-> v
 	;;
 }
@@ -514,17 +497,17 @@
 	while true
 		/* get at least delimiter count of characters */
 		match ensureread(f, 1)
-		| `Ok _:
-		| `Err e:	-> `Err e
-		| `Eof:
+		| `std.Err `Eof:
 			if !drop
 				ret = readinto(f, ret, f.rend - f.rstart)
 			;;
 			if ret.len > 0
-				-> `Ok ret
+				-> `std.Ok ret
 			else
-				-> `Eof
+				-> `std.Err `Eof
 			;;
+		| `std.Err e:	-> `std.Err e
+		| `std.Ok _:
 		;;
 		for var i = f.rstart; i < f.rend; i++
 			if f.rbuf[i] == delim[0]
@@ -537,7 +520,7 @@
 					ret = readinto(f, ret, i - f.rstart)
 				;;
 				f.rstart += delim.len
-				-> `Ok ret
+				-> `std.Ok ret
 			;;
 :nextiterread
 		;;
@@ -591,14 +574,13 @@
 	std.assert(n < f.wbuf.len, "ensured write capacity > buffer size")
 	if n > f.wbuf.len - f.wend
 		match writebuf(f, f.wbuf[:f.wend])
-		| `Ok len:
+		| `std.Ok len:
 			f.wend = 0
-			-> `Ok len
-		| `Err e: -> `Err e
-		| `Eof: -> `Eof
+			-> `std.Ok len
+		| `std.Err e: -> `std.Err e
 		;;
 	;;
-	-> `Ok n
+	-> `std.Ok n
 }
 
 /*
@@ -612,17 +594,16 @@
 	held = f.rend - f.rstart
 	if n > held
 		match fill(f, n)
-		| `Eof:	-> `Eof
-		| `Err e:	-> `Err e
-		| `Ok len:
+		| `std.Err e:	-> `std.Err e
+		| `std.Ok len:
 			if len >= n
-				-> `Ok len
+				-> `std.Ok len
 			else
-				-> `Eof
+				-> `std.Err `Eof
 			;;
 		;;
 	else
-		-> `Ok n
+		-> `std.Ok n
 	;;
 }
 
@@ -634,16 +615,16 @@
 	while src.len != 0
 		match f.write(src)
 		| `std.Ok 0:
-			-> `Eof
+			-> `std.Err `Eof
 		| `std.Ok n:
 			count += n
 			src = src[n:]
 		| `std.Err e:
-			-> `Err errtype(e)
+			-> `std.Err errtype(e)
 		;;
 	;;
 :writedone
-	-> `Ok count
+	-> `std.Ok count
 }
 
 
@@ -658,7 +639,7 @@
 	count = 0
 	/* Clear the error state so we can retry */
 	if f.lasterr != 0
-		-> `Err geterr(f)
+		-> `std.Err geterr(f)
 	;;
 
 	/* if we need to shift the slice down to the start, do it */
@@ -684,7 +665,7 @@
 			if count > 0
 				f.lasterr = e
 			else
-				-> `Err errtype(e)
+				-> `std.Err errtype(e)
 			;;
 			break
 		;;
@@ -691,9 +672,9 @@
 	;;
 
 	if count == 0
-		-> `Eof
+		-> `std.Err `Eof
 	else
-		-> `Ok count
+		-> `std.Ok count
 	;;
 }
 
@@ -705,20 +686,18 @@
 	-> errtype(e)
 }
 
-const errtype = {e : std.errno -> ioerr
+const errtype = {e : std.errno -> err
 	var errno
 
 	errno = (e : std.errno)
 	if errno == std.Ebadf
-		-> `Ebadfile
+		-> `Ebadf
 	elif errno == std.Einval
-		-> `Ebadfile
+		-> `Ebadf
 	elif errno == std.Efault
-		-> `Ebadbuf
-	elif errno == std.Eio
-		-> `Eioerr
+		-> `Eio
 	else
-		-> `Eioerr
+		-> `Eio
 	;;
 }
 
--- a/lib/bio/geti.myr
+++ b/lib/bio/geti.myr
@@ -4,16 +4,16 @@
 
 pkg bio =
 	/* unsigned big endian */
-	generic getbe8	: (f : file# -> status(@a::(numeric,integral)))
-	generic getbe16	: (f : file# -> status(@a::(numeric,integral)))
-	generic getbe32	: (f : file# -> status(@a::(numeric,integral)))
-	generic getbe64	: (f : file# -> status(@a::(numeric,integral)))
+	generic getbe8	: (f : file# -> std.result(@a::(numeric,integral), err))
+	generic getbe16	: (f : file# -> std.result(@a::(numeric,integral), err))
+	generic getbe32	: (f : file# -> std.result(@a::(numeric,integral), err))
+	generic getbe64	: (f : file# -> std.result(@a::(numeric,integral), err))
 
 	/* signed big endian */
-	generic getle8	: (f : file# -> status(@a::(numeric,integral)))
-	generic getle16	: (f : file# -> status(@a::(numeric,integral)))
-	generic getle32	: (f : file# -> status(@a::(numeric,integral)))
-	generic getle64	: (f : file# -> status(@a::(numeric,integral)))
+	generic getle8	: (f : file# -> std.result(@a::(numeric,integral), err))
+	generic getle16	: (f : file# -> std.result(@a::(numeric,integral), err))
+	generic getle32	: (f : file# -> std.result(@a::(numeric,integral), err))
+	generic getle64	: (f : file# -> std.result(@a::(numeric,integral), err))
 ;;
 
 /*
@@ -20,18 +20,18 @@
   reads a single integer-like value to the output stream, in
   little endian format
 */
-generic getle = {f, n -> status(@a::(numeric,integral))
+generic getle = {f, n -> std.result(@a::(numeric,integral), err)
 	var v, i
 
 	v = 0
 	match ensureread(f, n)
-	| `Eof:	-> `Eof
-	| `Err e :	-> `Err e
-	| `Ok _:
+	| `std.Err e:
+		-> `std.Err e
+	| `std.Ok _:
 		for i = 0; i < n; i++
 			v |= (f.rbuf[f.rstart++] : uint64) << (8*(i : uint64))
 		;;
-		-> `Ok (v : @a::(numeric,integral))
+		-> `std.Ok (v : @a::(numeric,integral))
 	;;
 }
 
@@ -39,19 +39,19 @@
   reads a single integer-like value to the output stream, in
   big endian format
 */
-generic getbe = {f, n -> status(@a::(numeric,integral))
+generic getbe = {f, n -> std.result(@a::(numeric,integral), err)
 	var v, i
 
 	v = 0
 	match ensureread(f, n)
-	| `Eof:	-> `Eof
-	| `Err e :	-> `Err e
-	| `Ok _:
+	| `std.Err e:
+		-> `std.Err e
+	| `std.Ok _:
 		for i = 0; i < n; i++
 			v <<= 8
 			v |= (f.rbuf[f.rstart++] : uint64)
 		;;
-		-> `Ok (v : @a::(numeric,integral))
+		-> `std.Ok (v : @a::(numeric,integral))
 	;;
 }
 
--- a/lib/bio/iter.myr
+++ b/lib/bio/iter.myr
@@ -18,9 +18,8 @@
 impl iterable lineiter -> byte[:] =
 	__iternext__ = {itp, outp
 		match bio.readln((itp# : file#))
-		| `Ok ln:	outp# = ln
-		| `Err _:	-> false
-		| `Eof:		-> false
+		| `std.Ok ln:	outp# = ln
+		| `std.Err _:	-> false
 		;;
 		-> true
 	}
@@ -37,9 +36,8 @@
 impl iterable chariter -> char =
 	__iternext__ = {itp, outp : char#
 		match bio.getc((itp# : file#))
-		| `Ok c:	outp# = c
-		| `Err _:	-> false
-		| `Eof:		-> false
+		| `std.Ok c:	outp# = c
+		| `std.Err _:	-> false
 		;;
 		-> true
 	}
--- a/lib/bio/puti.myr
+++ b/lib/bio/puti.myr
@@ -4,16 +4,16 @@
 
 pkg bio =
 	/* unsigned big endian */
-	generic putbe8	: (f : file#, v : @a::(numeric,integral) -> status(std.size))
-	generic putbe16	: (f : file#, v : @a::(numeric,integral) -> status(std.size))
-	generic putbe32	: (f : file#, v : @a::(numeric,integral) -> status(std.size))
-	generic putbe64	: (f : file#, v : @a::(numeric,integral) -> status(std.size))
+	generic putbe8	: (f : file#, v : @a::(numeric,integral) -> std.result(std.size, err))
+	generic putbe16	: (f : file#, v : @a::(numeric,integral) -> std.result(std.size, err))
+	generic putbe32	: (f : file#, v : @a::(numeric,integral) -> std.result(std.size, err))
+	generic putbe64	: (f : file#, v : @a::(numeric,integral) -> std.result(std.size, err))
 
 	/* unsigned little endian */
-	generic putle8	: (f : file#, v : @a::(numeric,integral) -> status(std.size))
-	generic putle16	: (f : file#, v : @a::(numeric,integral) -> status(std.size))
-	generic putle32	: (f : file#, v : @a::(numeric,integral) -> status(std.size))
-	generic putle64	: (f : file#, v : @a::(numeric,integral) -> status(std.size))
+	generic putle8	: (f : file#, v : @a::(numeric,integral) -> std.result(std.size, err))
+	generic putle16	: (f : file#, v : @a::(numeric,integral) -> std.result(std.size, err))
+	generic putle32	: (f : file#, v : @a::(numeric,integral) -> std.result(std.size, err))
+	generic putle64	: (f : file#, v : @a::(numeric,integral) -> std.result(std.size, err))
 ;;
 
 generic putbe8  = {f, v; -> putbe(f, (v : uint64), 1)}
@@ -30,9 +30,9 @@
 	var buf : byte[8]
 
 	match ensurewrite(f, n)
-	| `Eof:	-> `Eof
-	| `Err e:	-> `Err e
-	| `Ok _:
+	| `std.Err e:
+		-> `std.Err e
+	| `std.Ok _:
 		buf[0] = ((v >> 0) & 0xff : byte)
 		buf[1] = ((v >> 8) & 0xff : byte)
 		buf[2] = ((v >> 16) & 0xff : byte)
@@ -49,9 +49,9 @@
 	var buf : byte[8]
 
 	match ensurewrite(f, n)
-	| `Eof:	-> `Eof
-	| `Err e:	-> `Err e
-	| `Ok _:
+	| `std.Err e:
+		-> `std.Err e
+	| `std.Ok _:
 		buf[0] = ((v >> 56) & 0xff : byte)
 		buf[1] = ((v >> 48) & 0xff : byte)
 		buf[2] = ((v >> 40) & 0xff : byte)
--- a/lib/bio/test/bio-delim.myr
+++ b/lib/bio/test/bio-delim.myr
@@ -67,11 +67,11 @@
 
 const readln = {f
 	match bio.readln(f)
-	| `bio.Ok d:	-> d
-	| `bio.Eof:
+	| `std.Ok d:	-> d
+	| `std.Err `bio.Eof:
 		std.put("eof\n")
 		-> [][:]
-	| `bio.Err e:
+	| `std.Err e:
 		std.put("err\n")
 		-> [][:]
 	;;
@@ -79,11 +79,11 @@
 
 const readto = {f, delim
 	match bio.readto(f, delim)
-	| `bio.Ok d:	-> d
-	| `bio.Eof:
+	| `std.Ok d:	-> d
+	| `std.Err `bio.Eof:
 		std.put("eof\n")
 		-> [][:]
-	| `bio.Err e:
+	| `std.Err e:
 		std.put("err\n")
 		-> [][:]
 	;;
--- a/lib/bio/test/bio-endianrd.myr
+++ b/lib/bio/test/bio-endianrd.myr
@@ -1,13 +1,6 @@
 use std
 use bio
 
-generic try = {opt : bio.status(@a::(integral,numeric))-> @a::(integral,numeric)
-	match opt
-	| `bio.Ok val:	-> val
-	| _: std.fatal("read failed")
-	;;
-}
-
 const main = {
 	var b : byte
 	var w : uint16
@@ -23,31 +16,31 @@
 	
 	/* byte */
 	b = 0xaa
-	var r = try(bio.getle8(f))
+	var r = std.try(bio.getle8(f))
 	std.assert(r == b, "le byte broken: {x}\n", r)
-	std.assert(try(bio.getbe8(f)) == b, "be byte broken\n")
+	std.assert(std.try(bio.getbe8(f)) == b, "be byte broken\n")
 
 	/* word */
 	w = 0xaabb
-	std.assert(try(bio.getle16(f)) == w, "le word broken\n")
-	std.assert(try(bio.getbe16(f)) == w, "be word broken\n")
+	std.assert(std.try(bio.getle16(f)) == w, "le word broken\n")
+	std.assert(std.try(bio.getbe16(f)) == w, "be word broken\n")
 
 	/* long */
 	l = 0xaabbccdd
-	std.assert(try(bio.getle32(f)) == l, "le long broken\n")
-	std.assert(try(bio.getbe32(f)) == l, "be long broken\n")
+	std.assert(std.try(bio.getle32(f)) == l, "le long broken\n")
+	std.assert(std.try(bio.getbe32(f)) == l, "be long broken\n")
 
 	/* quad */
 	q = (0x11223344aabbccdd : uint64)
-	std.assert(try(bio.getle64(f)) == q, "le quad broken\n")
-	std.assert(try(bio.getbe64(f)) == q, "be quad broken\n")
+	std.assert(std.try(bio.getle64(f)) == q, "le quad broken\n")
+	std.assert(std.try(bio.getbe64(f)) == q, "be quad broken\n")
 
 	/* end of file */
 	match bio.getle64(f)
-	| `bio.Eof:
-	| `bio.Err _:
+	| `std.Err `bio.Eof:
+	| `std.Err _:
 		std.die("error on reading file\n")
-	| `bio.Ok v:
+	| `std.Ok v:
 		std.die("read past end of file\n")
 		v = q /* shut up type inference */
 	;;
--- a/lib/bio/test/bio-peek.myr
+++ b/lib/bio/test/bio-peek.myr
@@ -28,11 +28,11 @@
 
 const peekc = {f
 	match bio.peekc(f)
-	| `bio.Ok c:	-> c
-	| `bio.Eof:
+	| `std.Ok c:	-> c
+	| `std.Err `bio.Eof:
 		std.put("eof\n")
 		-> -1
-	| `bio.Err e:
+	| `std.Err e:
 		std.fatal("error reading\n")
 		-> -1
 	;;
@@ -40,11 +40,11 @@
 
 const peekb = {f
 	match bio.peekb(f)
-	| `bio.Ok b:	-> b
-	| `bio.Eof:
+	| `std.Ok b:	-> b
+	| `std.Err `bio.Eof:
 		std.put("eof\n")
 		-> -1
-	| `bio.Err e:
+	| `std.Err e:
 		std.fatal("error reading\n")
 		-> -1
 	;;
--- a/lib/bio/test/bio-read.myr
+++ b/lib/bio/test/bio-read.myr
@@ -40,12 +40,12 @@
 
 const r = {f, buf
 	match bio.read(f, buf)
-	| `bio.Ok b:
+	| `std.Ok b:
 		-> b
-	| `bio.Eof:
+	| `std.Err `bio.Eof:
 		std.put("eof\n")
 		-> ""
-	| `bio.Err e:
+	| `std.Err e:
 		std.put("err\n")
 		-> ""
 	;;
--- a/lib/bio/test/mem.myr
+++ b/lib/bio/test/mem.myr
@@ -7,7 +7,7 @@
 
 	f = bio.mkmem("hello world")
 	match bio.read(f, buf[:3])
-	| `bio.Ok "hel":
+	| `std.Ok "hel":
 		/* ok */
 	| _:
 		std.fatal("invalid read from memfile")
@@ -14,7 +14,7 @@
 	;;
 
 	match bio.read(f, buf[:])
-	| `bio.Ok "lo world":
+	| `std.Ok "lo world":
 		/* ok */
 	| _:
 		std.fatal("invalid read from memfile")
@@ -21,7 +21,7 @@
 	;;
 
 	match bio.read(f, buf[:])
-	| `bio.Eof:
+	| `std.Err `bio.Eof:
 		/* ok */
 	| _:
 		std.fatal("expected eof in memfile")
--- a/lib/http/client.myr
+++ b/lib/http/client.myr
@@ -180,9 +180,8 @@
 
 	buf = std.slalloc(r.len)
 	match bio.read(s.f, buf)
-	| `bio.Err e:	goto shortread
-	| `bio.Eof:	goto shortread
-	| `bio.Ok rd:
+	| `std.Err e:	goto shortread
+	| `std.Ok rd:
 		if rd.len != r.len
 			goto shortread
 		;;
@@ -215,13 +214,10 @@
 		| `std.Ok sz:
 			std.slgrow(&buf, buf.len + sz)
 			match bio.read(s.f, buf[len:len + sz])
-			| `bio.Eof:
+			| `std.Err e:
 				std.slfree(buf)
-				-> `std.Err `Eshort
-			| `bio.Err e:
-				std.slfree(buf)
 				-> `std.Err `Econn
-			| `bio.Ok str:
+			| `std.Ok str:
 				if str.len != sz
 					std.slfree(buf)
 					-> `std.Err `Eshort
@@ -243,9 +239,8 @@
 	var r
 
 	match bio.readln(s.f)
-	| `bio.Err e:	r = `std.Err `Econn
-	| `bio.Eof:	r = `std.Err `Econn
-	| `bio.Ok crlf:
+	| `std.Err e:	r = `std.Err `Econn
+	| `std.Ok crlf:
 		if std.strstrip(crlf).len == 0
 			r = `std.Ok void
 		else
--- a/lib/http/parse.myr
+++ b/lib/http/parse.myr
@@ -23,13 +23,10 @@
 	])
 
 	match bio.readln(s.f)
-	| `bio.Err e:
+	| `std.Err e:
 		err = `Econn
 		goto error
-	| `bio.Eof:	
-		err = `Econn
-		goto error
-	| `bio.Ok ln:
+	| `std.Ok ln:
 		match parsereqstatus(s, r, ln)
 		| `std.Ok void:
 		| `std.Err e:
@@ -42,13 +39,10 @@
 
 	while true
 		match bio.readln(s.f)
-		| `bio.Err e:	
+		| `std.Err e:	
 			err = `Econn
 			goto error
-		| `bio.Eof:
-			err = `Econn
-			goto error
-		| `bio.Ok ln:
+		| `std.Ok ln:
 			if std.strstrip(ln).len == 0
 				std.slfree(ln)
 				break
@@ -70,9 +64,8 @@
 
 const parseresp = {s, r : resp#
 	match bio.readln(s.f)
-	| `bio.Err e:	r.err = `std.Some `Econn
-	| `bio.Eof:	r.err = `std.Some `Econn
-	| `bio.Ok ln:
+	| `std.Err _:	r.err = `std.Some `Econn
+	| `std.Ok ln:
 		if !parserespstatus(s, r, ln)
 			std.slfree(ln)
 			-> false
@@ -82,9 +75,8 @@
 
 	while true
 		match bio.readln(s.f)
-		| `bio.Err e:	r.err = `std.Some `Econn
-		| `bio.Eof:	r.err = `std.Some `Econn
-		| `bio.Ok ln:
+		| `std.Err e:	r.err = `std.Some `Econn
+		| `std.Ok ln:
 			if std.strstrip(ln).len == 0
 				std.slfree(ln)
 				break
@@ -203,9 +195,8 @@
 	var ret, str
 
 	match bio.readln(s.f)
-	| `bio.Eof:	ret = `std.Err `Econn
-	| `bio.Err e:	ret = `std.Err `Econn
-	| `bio.Ok ln:
+	| `std.Err e:	ret = `std.Err `Econn
+	| `std.Ok ln:
 		str = ln
 		match parsenumber(&str, 16)
 		| `std.Some n:	ret = `std.Ok (n : std.size)
--- a/lib/http/session.myr
+++ b/lib/http/session.myr
@@ -58,9 +58,8 @@
 	;;
 	ap = std.vastart(&args)
 	match bio.putv(s.f, fmt, &ap)
-	| `bio.Ok _:	/* nothing */
-	| `bio.Err _:	s.err = true
-	| `bio.Eof:	s.err = true
+	| `std.Ok _:	/* nothing */
+	| `std.Err _:	s.err = true
 	;;
 	-> s.err
 }
@@ -70,9 +69,8 @@
 		-> false
 	;;
 	match bio.write(s.f, buf)
-	| `bio.Ok _:	/* nothing */
-	| `bio.Err _:	s.err = true
-	| `bio.Eof:	s.err = true
+	| `std.Ok _:	/* nothing */
+	| `std.Err _:	s.err = true
 	;;
 	-> s.err
 }
--- a/lib/inifile/parse.myr
+++ b/lib/inifile/parse.myr
@@ -54,13 +54,13 @@
 	f = bio.mkfile(fd, bio.Rd)
 	while true
 		match bio.readln(f)
-		| `bio.Eof:
+		| `std.Err `bio.Eof:
 			break
-		| `bio.Ok ln:
+		| `std.Ok ln:
 			if !parseline(p, ini, ln)
 				break
 			;;
-		| `bio.Err e:
+		| `std.Err e:
 			p.err = `std.Some `Fileerr
 			break
 		;;
--- a/lib/inifile/write.myr
+++ b/lib/inifile/write.myr
@@ -53,7 +53,7 @@
 
 		val = std.htgetv(ini.elts, (sect, key), "")
 		match bio.put(f, "\t{} = {}\n", key, val)
-		| `bio.Err e: -> false
+		| `std.Err e: -> false
 		| _:
 		;;
 	;;
--- a/lib/regex/redump.myr
+++ b/lib/regex/redump.myr
@@ -57,12 +57,12 @@
 const dump = {re, fd 
 	while true
 		match bio.readln(fd)
-		| `bio.Ok ln:
+		| `std.Ok ln:
 			show(re, ln, regex.exec(re, ln))
 			std.slfree(ln)
-		| `bio.Eof:
+		| `std.Err `bio.Eof:
 			break
-		| `bio.Err e:
+		| `std.Err e:
 			std.put("error reading from input: {}", e)
 			break
 		;;
--- a/mbld/libs.myr
+++ b/mbld/libs.myr
@@ -55,16 +55,14 @@
 
 	(f, dir) = openlib(lib, targ, incs)
 	match bio.getc(f)
-	| `bio.Ok 'U':	/* ok */
-	| `bio.Ok _:	std.fput(1, "{}/{}: not a usefile\n", dir, lib)
-	| `bio.Err e:	std.fatal("{}/{}: error reading: {}\n", dir, lib, e)
-	| `bio.Eof:	std.fatal("{}/{}: truncated\n", dir, lib)
+	| `std.Ok 'U':	/* ok */
+	| `std.Ok _:	std.fput(1, "{}/{}: not a usefile\n", dir, lib)
+	| `std.Err e:	std.fatal("{}/{}: error reading: {}\n", dir, lib, e)
 	;;
 	match bio.getbe32(f)
-	| `bio.Ok Abiversion:	/* nothing: version matches. */
-	| `bio.Ok v:	std.fput(1, "{}/{}: mismatched abi {}\n", dir, lib, v)
-	| `bio.Err e:	std.fatal("{}/{}: error reading: {}\n", dir, lib, e)
-	| `bio.Eof:	std.fatal("{}/{}: truncated\n", dir, lib)
+	| `std.Ok Abiversion:	/* nothing: version matches. */
+	| `std.Ok v:	std.fput(1, "{}/{}: mismatched abi {}\n", dir, lib, v)
+	| `std.Err e:	std.fatal("{}/{}: error reading: {}\n", dir, lib, e)
 	;;
 	std.slfree(rdstr(f))
 
@@ -72,10 +70,10 @@
 	dyndep = [][:]
 	while true
 		match bio.getc(f)
-		| `bio.Ok 'L':	std.slpush(&dep, rdstr(f))
-		| `bio.Ok 'X':	std.slpush(&dyndep, rdstr(f))
-		| `bio.Err e:	std.fatal("{}: error reading {}", lib, e)
-		| _:		break;
+		| `std.Ok 'L':	std.slpush(&dep, rdstr(f))
+		| `std.Ok 'X':	std.slpush(&dyndep, rdstr(f))
+		| `std.Err e:	std.fatal("{}: error reading {}\n", lib, e)
+		| _:		break
 		;;
 	;;
 	bio.close(f)
@@ -179,11 +177,10 @@
 	var sl
 
 	match bio.getbe32(f)
-	| `bio.Ok l:
+	| `std.Ok l:
 		len = l
 		sl = std.slalloc(len)
-	| `bio.Eof:	std.fatal("end of file while reading string")
-	| `bio.Err e:	std.fatal("error while reading string: {}", e)
+	| `std.Err e:	std.fatal("error while reading string: {}", e)
 	;;
 	bio.read(f, sl)
 	-> sl
--- a/mbld/subtest.myr
+++ b/mbld/subtest.myr
@@ -29,9 +29,11 @@
 	log = bio.mkfile(logfd, bio.Wr)
 	res = `std.None
 	match bio.readln(f)
-	| `bio.Err e:	std.fatal("error reading subfile: {}\n", e)
-	| `bio.Eof:	-> `std.None
-	| `bio.Ok ln:
+	| `std.Err `bio.Eof:
+		-> `std.None
+	| `std.Err e:
+		std.fatal("error reading subfile: {}\n", e)
+	| `std.Ok ln:
 		match testplan(ln)
 		| `std.None:
 			bio.write(log, ln)
--- a/support/dumpleak.myr
+++ b/support/dumpleak.myr
@@ -50,11 +50,11 @@
 const dump = {path, f, stats
 	while true
 		match bio.getle64(f)
-		| `bio.Ok 0:	tracealloc(path, f, stats)
-		| `bio.Ok 1:	tracefree(path, f, stats)
-		| `bio.Eof:	break
-		| `bio.Ok wat:	std.fatal("unknown action type {x}\n", wat)
-		| `bio.Err e:	std.fatal("failed to read {}: {}\n", path, e)
+		| `std.Err `bio.Eof:	break
+		| `std.Ok 0:		tracealloc(path, f, stats)
+		| `std.Ok 1:		tracefree(path, f, stats)
+		| `std.Ok wat:		std.fatal("unknown action type {x}\n", wat)
+		| `std.Err e:		std.fatal("failed to read {}: {}\n", path, e)
 		;;
 	;;
 	if !summary
@@ -116,7 +116,7 @@
 
 const get64 = {path, f
 	match bio.getle64(f)
-	| `bio.Ok v:	-> v
+	| `std.Ok v:	-> v
 	| res:	std.fatal("failed to read {}: {}\n", path, res)
 	;;
 }