caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Alessandro Baretta <alex@baretta.com>
To: Cezary Kaliszyk <ck189400@zodiac.mimuw.edu.pl>,
	Ocaml <caml-list@inria.fr>
Subject: Re: [Caml-list] format type
Date: Mon, 04 Nov 2002 12:56:10 +0100	[thread overview]
Message-ID: <3DC6605A.6060302@baretta.com> (raw)
In-Reply-To: <20021104110359.GA17924@zodiac.mimuw.edu.pl>



Cezary Kaliszyk wrote:
> On Mon, Nov 04, 2002 at 08:54:13AM +0100, Alessandro Baretta wrote:
> 

>>>>The only known workaround for me for now is to pass "%t" and
>>>>make my function not (unit -> unit) but ('a -> unit).
>>>
>>As far as I can see from the docs, "%t" is only meaningful 
>>with the Printf module. I see no mention of it in Scanf. 
>>What exactly are you trying to do anyway?
> 
> I am trying to create a protocol for passing messages via network.
> Each message may be acompanied by a certain amount of parameters
> (of type char, int, float or string) (the parameters are dependant on the
> message).
> 
> output/input_value aren't apropriate. (For network speed reasons, and no
> type extensibility)

I'd avoid "reinventing the wheel" and stick with well known 
protocols. Did you try anything XML based? It's versatile 
and well supported. And it will spare you a lot of low level 
parsing routines. But of course, it is suboptimal, bitrate-wise.

> I am writing a function which adds a message to the protocol, which takes the
> type of arguments accompanying the message and the receiving function.
> It should return function used to send this message type. Eg:
> 
> let two_char_sender = add_to_protocol "%c%c" two_char_receiver;;
> 
> Where two_char_receiver : (char -> char -> unit)
> And   tho_char_sender : (char -> char -> unit).
> 
> And I'd like the types to be controlled.
> 
> And I've written it. But it doesn't work if I want to create a message
> that does not take any parameters. And I suppose the builtin type format
> doesn't have the functionality necessary to write it. 

I have a feeling you are asking more of the format type than 
it was meant to handle. The format type is meant to be used 
with the Scanf and Printf modules. You can parse a message 
according to a format with Scanf, and by the same means you 
can format a message with Printf. If you are using format 
values in different contexts, you are probably abusing them.

>>Assuming you are talking about the Scanf module, I'd say you 
>>can't. Of course, if your function takes a unit input, it 
>>can very well be a perfectly polymorphic function (? la 
>>ignore) with type ('a -> unit). In which case you can force 
>>a call to such function while scanning the input buffer by 
>>passing it a range conversion with an empty range: 
>>"%[^\000-\255]". Your function would be called with an empty 
>>string as an actual parameter.
> 
> I'm not talkin about Printf nor Scanf, but about my module that uses the
> format type.
<snip>
> The format argument is parsed by me, not by scanf or printf (as I wrote
> in the example code) and I don't know where in ocaml code is type
> checking of the arguments accompanying the format type.
> 
> Cezary Kaliszyk

I lost track of what you are trying to do. Sorry for this. 
But I have a feeling you are making things much more complex 
than necessary.

Did you consider using yacc to parse your data stream 
according to your protocol specification? Format strings are 
sad heritage from C, and good for quick hacks where you do 
not want to take the time to write up a lexer and a parser, 
but you must realize they have some limitations.

I'm sorry for not being any more helpful.

Alex

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


      reply	other threads:[~2002-11-04 11:56 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-11-03  7:08 Cezary Kaliszyk
2002-11-04  4:00 ` Ken Wakita
2002-11-04  7:54   ` Alessandro Baretta
2002-11-04 11:03     ` Cezary Kaliszyk
2002-11-04 11:56       ` Alessandro Baretta [this message]

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=3DC6605A.6060302@baretta.com \
    --to=alex@baretta.com \
    --cc=caml-list@inria.fr \
    --cc=ck189400@zodiac.mimuw.edu.pl \
    /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).