Skip to content

Pipe operator support #72

@michallepicki

Description

@michallepicki

It would be great to have support for the pipe operator. It is a common way in many functional programming languages to compose functions into a readable left-to-right or top-to-bottom "pipeline" of steps of computation.

Documentation in OCaml stdlib
Documentation in Elixir Kernel

I think it should probably behave like in OCaml and not like Elixir, meaning this Caramel code in file main.ml when ran with ocaml compile main.ml && escript main.erl would print 2 (notice the order of arguments in subtract and divide):

let print_int number = Io.format "~0tp~n" [ number ]

let subtract x y = y - x
let main _ =
  let divide x y = y / x in
  10 |> subtract 2 |> divide 4 |> print_int

so it would be equivalent to this Caramel code:

let print_int number = Io.format "~0tp~n" [ number ]

let subtract x y = y - x
let main _ =
  let divide x y = y / x in
  print_int (divide 4 (subtract 2 10))

and behave the same as this toplevel OCaml code:

(* let print_int number = Io.format "~0tp~n" [ number ] *)

let subtract x y = y - x ;;
let main _ =
  let divide x y = y / x in
  10 |> subtract 2 |> divide 4 |> print_int ;;

main ()

when executed:

$ ocaml main.ml
2

Metadata

Metadata

Assignees

No one assigned

    Labels

    compilerRelated to the OCaml to Erlang compilerenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions