2012-01-24 20 views
20

En F # No puedo vivir sin tuberías (<| y |>)¿Es posible utilizar tuberías en OCaml?

let console(dashboard : Dashboard ref) = 
    let rec eat (command : string) = 
     command.Split(' ','(',')') 
     |> Seq.filter(fun s -> s.Length <> 0) 
     |> fun C -> 
      (Seq.head C).ToUpper() |> fun head -> 

¿Puedo utilizar <| y |> en OCaml?

Respuesta

30

Están disponibles desde OCaml 4.01. Sin embargo, <| se llama allí @@, por lo que tiene la asociatividad de operador correcta.

Alternativamente, puede definirse ellos:

let (|>) v f = f v 
let (<|) f v = f v (* or: *) 
let (@@) f v = f v 

O utilizar Ocaml batteries included, que tiene las |> y <| operadores definidos en BatStd.

+2

actualización: en 4.01.0 '|>' está incluido en el archivo stdlib, y '@@' se define igual que '| <'. – nlucaroni

+0

@nlucaroni gracias! Me pregunto por qué eligieron '@@' en lugar de algo obviamente complementario a la tubería hacia adelante. ('<|' parece ser la mejor opción para mí, pero '| <' al menos usa glifos análogos). –

+1

Es debido a la asociatividad necesaria en la gramática. '@' se usa para iniciar las funciones infija con la asociación correcta, mientras que '|' se usa para la izquierda. Este ha sido el estándar por un tiempo. Ver: http://stackoverflow.com/questions/6150551/ocaml-why-i-cant-use-this-operator-infix – nlucaroni

Cuestiones relacionadas