Module Base.Applicative.Make_args

Parameters

X : S

Signature

type 'a arg

the underlying applicative

type ('f, 'r) t

'f is the type of a function that consumes the list of arguments and returns an 'r.

val nil : ('r'rt

the empty argument list *

val cons : 'a arg ‑> ('f'rt ‑> ('a ‑> 'f'rt

prepend an argument

val (@>) : 'a arg ‑> ('f'rt ‑> ('a ‑> 'f'rt

infix operator for cons

val step : ('f1'rt ‑> f:('f2 ‑> 'f1) ‑> ('f2'rt

Transform argument values in some way. For example, one can label a function argument like so:


        step ~f:(fun f x -> f ~foo:x) : ('a -> 'r1, 'r2) t -> (foo:'a -> 'r1, 'r2) t
      

The preferred way to factor out an Args sub-sequence:


        let args =
          Foo.Args.(
            bar "A"
            (* TODO: factor out the common baz qux sub-sequence *)
            @> baz "B"
            @> qux "C"
            @> zap "D"
            @> nil
          )
      

is to write a function that prepends the sub-sequence:


        let baz_qux remaining_args =
          Foo.Args.(
            baz "B"
            @> qux "C"
            @> remaining_args
          )
      

and splice it back into the original sequence using @@ so that things line up nicely:


        let args =
          Foo.Args.(
            bar "A"
            @> baz_qux
            @@ zap "D"
            @> nil
          )
      
val mapN : f:'f ‑> ('f'rt ‑> 'r arg
val applyN : 'f arg ‑> ('f'rt ‑> 'r arg