sprint(T, String): trait
includes cstring
introduces
parse: String -> T
unparse: T -> String
isSprint: String, T -> bool
asserts \forall t: T, s: String
parse(unparse(t)) == t;
isSprint(s, t) ==
parse(s) = t /\ nullTerminated(s)
implies T partitioned by unparse