Unix.pipeを使って in_channel, out_channelを作りたいです。

let _ =
  let read_desc, write_desc = Unix.pipe () in
  let read_ch = Unix.in_channel_of_descr read_desc in
  set_binary_mode_in read_ch false;
  let write_ch = Unix.out_channel_of_descr read_desc in
  set_binary_mode_out write_ch false;
  output_string write_ch "hello"; flush write_ch;
  (read_ch, write_ch)

上記ファイルをpipe.mlという名前で保存して次のようにコンパイルしたところ、実行時エラーとなってしまいます。どこが間違っているか分かりません。

$ ocamlc -g unix.cma pipe.ml
$ ./a.out 
Fatal error: exception Sys_error("Bad file descriptor")
Raised by primitive operation at unknown location
Called from file "pipe.ml", line 8, characters 34-48

当方の環境は以下の通りです。

  • Ubuntu 14.04 64bit
  • ocaml 4.02.3