#line 5 "/home/ubuntu/felix/src/packages/unique.fdoc"
open class Unique
{
fun box[T] : T -> _uniq T = "($t)";
gen unbox[T] : _uniq T -> T = "($t)";
proc kill[T] : uniq T = ";";
typedef fun uniq (T:LINEAR):LINEAR => _uniq T;
fun peek[T] : &<(uniq T) -> T = "*($t)";
instance[T] Repr[uniq T] {
fun repr(var x:uniq T) => "uniq " + (C_hack::cast[T] x).str;
}
instance[T] Str[uniq T] {
fun str(var x:uniq T) => "uniq " + (C_hack::cast[T] x).str;
}
instance[T with Repr[T]] Repr[&<(uniq T)] {
fun repr(var x:&<(uniq T)) => "uniq " + x.peek.repr;
}
instance[T with Str[T]] Str[&<(uniq T)] {
fun str(var x:&<(uniq T)) => x.peek.str;
}
}