This behavior is expected given than OCaml is strict, and your operator <|||> would be an ordinary function (unlike || and &&). You have to use either functions (or lazy values) instead of expressions, or options instead of exceptions. Tiphaine Le 17/02/2012 19:16, Pierre-Alexandre Voye a écrit : > Hello, I'm trying to implement a scala concept "partial application" > in which one can chains pattern matching function. If the first > failed, the second is tried. > It seems it is impossible to give an exception as argument to a function. > > > > exception Nothing;; > > let (<|||>) a b = try a > with > > | Nothing -> (try b > with > > | Nothing -> raise > Nothing);; > > val ( <|||> ) : 'a -> 'a -> 'a = > > > (raise Nothing) <|||> > "jj";; > > Exception: Nothing. > > > But if I try : > try (raise Nothing) > with > > | Nothing -> (try > "jj"with > > | Nothing -> raise > Nothing);; > > - : string = "jj" > > Is there a workaround ? > > > Regards, > P-A > -- > --------------------- > https://twitter.com/#!/ontologiae/ > http://linuxfr.org/users/montaigne >