caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: kirillkh <kirillkh@gmail.com>
To: "Daniel de Rauglaudre" <daniel.de_rauglaudre@inria.fr>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Re: Locally-polymorphic exceptions [was: folding over a file]
Date: Wed, 3 Oct 2007 14:19:56 +0200	[thread overview]
Message-ID: <e2d02be30710030519h63a08197l7f6cfd8f9aac0806@mail.gmail.com> (raw)
In-Reply-To: <20071003114832.GB23824@yquem.inria.fr>

[-- Attachment #1: Type: text/plain, Size: 1748 bytes --]

Hi,

2007/10/3, Daniel de Rauglaudre <daniel.de_rauglaudre@inria.fr>:
>
> Hi,
>
> > 2007/10/3, oleg@pobox.com <oleg@pobox.com>:
> >
> > exception Done of 'a
> >
> >  let fold_file (file: in_channel)
> >               (read_func: in_channel->'a)
> >               (elem_func: 'a->'b->'b)
> >               (seed: 'b) =
> > [...]
>
> Personnally, I don't like exceptions because they generally control too
> much part of code.


It's easy enough to localize the exception scope in this case and to see
that catching it at the top recursive invocation gets rid of it for sure.
Even the most dreadful beast is harmless, when encapsulated in a cage. (C)

I wonder what are continuations' maintenance properties, though. Any
comments? I'm not fluent in them, yet.

I often practice things like:
>
>   match try Some (...) with [ Exception -> None ] with
>   [ Some v -> blabla
>   | None -> blublu ]
>
> I would write your function like this:
>
>   value fold_file (file : in_channel) (read_func : in_channel -> 'a)
>     (elem_func : 'a -> 'b -> 'b) (seed : 'b)
>   =
>     let rec loop prev_val =
>       match try Some (read_func file) with [ End_of_file -> None ] with
>       [ Some input ->
>           let combined_val = elem_func input prev_val in
>           loop combined_val
>       | None -> prev_val ]
>     in
>     loop seed
>   ;


A similar solution has been proposed in the original discussion ("best and
fastest way to read lines from a file?" thread). But then someone suggested
using a second exception instead, which is better performance-wise, since it
avoids variant allocations on the common code path. What I tried to do with
polymorphic exception is implement a generalized channel fold combinator
based on this idea.

-Kirill

[-- Attachment #2: Type: text/html, Size: 2991 bytes --]

  reply	other threads:[~2007-10-03 12:19 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-03  8:35 oleg
2007-10-03 11:27 ` kirillkh
2007-10-03 11:48   ` [Caml-list] " Daniel de Rauglaudre
2007-10-03 12:19     ` kirillkh [this message]
2007-10-03 12:32       ` Daniel de Rauglaudre
2007-10-03 14:34         ` kirillkh
2007-10-03 20:39   ` Christophe Raffalli
2007-10-03 22:50     ` Unsoundness is essential skaller
2007-10-03 23:13       ` [Caml-list] " Jacques Carette
2007-10-04  1:24         ` skaller
2007-10-04 11:26           ` David Allsopp
2007-10-04 12:45             ` Vincent Hanquez
2007-10-04 15:07               ` skaller
2007-10-03 23:13       ` Vincent Aravantinos
2007-10-04  1:49         ` skaller
2007-10-03 23:28       ` Joshua D. Guttman
2007-10-04  1:52         ` skaller
2007-10-04  2:35           ` Brian Hurt
2007-10-04  7:46           ` Christophe Raffalli
2007-10-04  8:56             ` Arnaud Spiwack
2007-10-04 14:49               ` skaller
2007-10-04 15:00                 ` Harrison, John R
2007-10-04 15:29                 ` Andrej Bauer
2007-10-04 16:25                   ` skaller
2007-10-04 18:17                     ` Arnaud Spiwack
2007-10-04 20:54                       ` skaller
2007-10-04 22:24                         ` Arnaud Spiwack
2007-10-04 16:37                   ` skaller
2007-10-04 18:59                     ` Christophe Raffalli
2007-10-04 15:04               ` Andrej Bauer
2007-10-04 15:57                 ` Christophe Raffalli
2007-10-04 16:03                 ` skaller
2007-10-04 20:02                   ` Ken Rose
2007-10-04 21:00                     ` skaller
2007-10-04 15:31       ` Lukasz Stafiniak
2007-10-04 17:56       ` rossberg
2007-10-04 19:56         ` skaller
2007-10-04 21:07           ` rossberg
2007-10-04 22:23             ` skaller
2007-10-05  2:48               ` Bárður Árantsson
2007-10-04  2:16   ` Locally-polymorphic exceptions [was: folding over a file] oleg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e2d02be30710030519h63a08197l7f6cfd8f9aac0806@mail.gmail.com \
    --to=kirillkh@gmail.com \
    --cc=caml-list@inria.fr \
    --cc=daniel.de_rauglaudre@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).