struct
  type ('a, 'b) t = ('a,'b) relation
  let create ?n () = 
    create [] ident (fun x xs -> x :: xs)
  let add = add
  let stream = stream
  let of_stream xs = 
    let r = create () in
    Stream.iter
      ~f:(fun (x,y) -> add r x y)
      xs ;
    r
end