Re: How do you declare infix in Ocaml

From: Brian Rogoff (bpr@best.com)
Date: Wed May 31 2000 - 18:45:39 MET DST

  • Next message: Dave Berry: "RE: CamlTk and LablTk"

    If you take a look at, for instance, the Num library, or the types of
    the infixes in Pervasives, you'll notice that the infix is parenthesized.
    That is also how you declare new ones, or redefine the existing ones.
    For example,

    # let (+@) x y = x + y - 1;;
    val ( +@ ) : int -> int -> int = <fun>
    # 1 +@ 0;;
    - : int = 0

    and the new (+@) gets its precedence from the first character of the
    lexeme, the "+".

    Prefixes are defined similarly,

    # let (~@) = fun x -> String.uppercase x ;;
    val ( ~@ ) : string -> string = <fun>
    # ~@ "hi there";;
    - : string = "HI THERE"

    You can also redefine the existing infixes and prefixes, including the
    ones like mod, not, and or, but that would be very nasty.

    I wish that there was some mechanism like in Haskell to make infixes out
    of identifiers, but of course we would be back to having directives again
    to resolve ambiguities in precedence and associativity if this were the
    case. Camlp4 helps here.

    -- Brian

    On Tue, 30 May 2000, Steve Stevenson wrote:

    > In caml there are directives to do this. The obvious doesn't work in
    > Ocaml.
    >
    > best regards
    >
    > steve
    >
    >



    This archive was generated by hypermail 2b29 : Sat Jun 03 2000 - 09:36:48 MET DST