let load filename =
    with_in_file filename begin
      fun ic ->
        let n = String.length I.magic_number in
        let buf = String.create n in
        really_input ic buf 0 n;
        if buf = I.magic_number then begin
          (input_value ic : I.t)
        end else begin
          raise (Bad_marshalled_data filename)
        end
    end