Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] OCaml wishlist
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2003-10-21 (19:18)
From: Alain.Frisch@e...
Subject: Re: [Caml-list] OCaml wishlist
On Tue, 21 Oct 2003, Richard Jones wrote:

> 1. 'return' from a function. eg:
>   let foo x =
>     if x < 0 then return "OSL";
>     (* long & complex code *)
>     return "some other string"
>   I know I can do this using if ... else, but when you have multiple
>   levels of if ... else you end up being indented so far across the
>   screen as to make coding unpleasant. This is particularly a concern
>   with writing basically imperative UI code.
>   Is it possible to do something like this with camlp4? (as a stopgap -
>   I still think it should go into the language)

With Camlp4 and the Obj module, yes, it should be possible, but
inefficient. I assume you want to be able to escape from loops,
so you have to use exceptions (if you don't want to escape from loops,
I guess you can avoid using exceptions, with a lot of extra option types).

You can use Camlp4 to expand

fun x -> ... (return e1) ... (return e2) ... e

(the return statements are not under abstractions)


fun x -> (try ... (raise (Return (Obj.repr (e1 : 'a))))
              ... (raise (Return (Obj.repr (e1 : 'a))))
              ... e2
          with Return x -> Obj.magic x) : 'a

with a global definition:

exception Return of Obj.t

You need the 'a annotation to ensure type-safety (btw, would the above
version be correct in all cases?). Of course the 'a name should be unique
for the abstraction.

AFAIK, it is not possible to define in a syntax extension a local
exception (inside a "let module M = struct ... end in ...") with an
argument of the return type (which is unknown at preprocessing time,
and moreover it might be polymorphic).

Needless to say, this will be inefficient.

> 2. abstract data type syntactic sugar:

How does it interact with type inference?



To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: