¿Puedo usar el operador de canalización en F # para pasar un argumento a un constructor?

Este código invierte una cadena:

let reverse (s : string) = new string(s.ToCharArray() |> Array.rev)

¿Se puede reescribir esto utilizando el operador de canalización para pasar el argumento requerido alstring() ¿constructor? Por ejemplo, esto parece más idiomático:

// Doesn't compile:
let reverse (s : string) = s.ToCharArray() |> Array.rev |> new string

Del mismo modo, ¿por qué no puedo usar elstring operador de la siguiente manera?

let reverse2 (s : string) = s.ToCharArray() |> Array.rev |> string

Aquí está en acción:

> reverse2 "foo" ;;
val it : string = "System.Char[]"

Devuelve el tipo en lugar de "oof".