caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jon Harrop <jon@ffconsultancy.com>
To: skaller <skaller@users.sourceforge.net>
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] Custom operators in the revised syntax
Date: Sat, 12 May 2007 05:47:05 +0100	[thread overview]
Message-ID: <200705120547.06083.jon@ffconsultancy.com> (raw)
In-Reply-To: <1178944803.14691.28.camel@rosella.wigram>

On Saturday 12 May 2007 05:40, you wrote:
> On Sat, 2007-05-12 at 03:48 +0100, Jon Harrop wrote:
> > Using, +, +., +| and +|| is better than add, add_float, add_vector,
> > add_matrix but allowing + to be used to all such types ('a -> 'a -> 'a)
> > is much better still. It isn't even that hard to add to the language.
>
> Oh? It changes the way type inference works.

Yes.

> I have only seen one algorithm for this an it was
> extremely complicated. If you know a better way I'd
> sure like to know what it is.

AFAIK, you just change the unify to intersect sets of types. I assume the 
implementation of polymorphic variants already does this, so take that and 
make it enforce a single type contructor at function boundaries (maybe 
defaulting in some cases). If you "polymorphic variant" has more than one 
constructor then there is an ambiguity and you flag an error asking for a 
type annotation.

> 	let f a b = a + b
>
> will pass type checking,

The F# approach is to default + to int, to maintain compatibility with OCaml.

> I know F# supports overloaded operators, but I have no idea
> how it can work.

.NET provides run-time type information so I assume the compiler specializes 
when types are static and resorts to run-time dispatch otherwise. I was 
certainly advised against using generics to implement a float/float32 FFT 
because they incur run-time tests for many simple arithmetic operations, 
killing performance.

> and this kind of constraint, unfortunately, doesn't propagate
> (i.e. the above isn't really a type). Propagating ground
> type sets is actually easy, but once you have higher orders
> it is probably undecidable.

I hadn't thought of that. I just discovered that you cannot add vectors of 
vectors in F#, so it is probably 1st order only.

-- 
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
The F#.NET Journal
http://www.ffconsultancy.com/products/fsharp_journal/?e


  reply	other threads:[~2007-05-12  4:52 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-10 20:55 Nicolas Pouillard
2007-05-10 21:35 ` [Caml-list] " Loup Vaillant
2007-05-10 22:25   ` Nicolas Pouillard
2007-05-11  6:52 ` Stefano Zacchiroli
2007-05-11 13:14 ` dmitry grebeniuk
2007-05-11 14:15   ` Loup Vaillant
2007-05-11 14:37     ` Jon Harrop
2007-05-11 14:46       ` Nicolas Pouillard
2007-05-12  2:48         ` Jon Harrop
2007-05-12  4:40           ` skaller
2007-05-12  4:47             ` Jon Harrop [this message]
2007-05-12  5:45               ` skaller
2007-05-12  5:59                 ` Jon Harrop
2007-05-12  6:43                   ` skaller
2007-05-12 10:22             ` Richard Jones
2007-05-13 15:42               ` Arnaud Spiwack
2007-05-13 16:04                 ` ls-ocaml-developer-2006
2007-05-13 20:08                   ` Nicolas Pouillard
2007-05-12  9:49           ` Nicolas Pouillard
2007-05-12 10:09             ` Jon Harrop
2007-05-11 14:52       ` Loup Vaillant
2007-05-11 18:32         ` skaller
2007-05-12  4:48         ` Jon Harrop
2007-05-11 18:23       ` skaller
2007-05-11 14:40     ` Nicolas Pouillard
2007-05-11 18:22     ` skaller
2007-05-11 14:36   ` Nicolas Pouillard
2007-05-11 14:47     ` brogoff
2007-05-11 14:51       ` Nicolas Pouillard
2007-05-11 18:25         ` brogoff
2007-05-11 20:37           ` Nicolas Pouillard
2007-05-12 22:54           ` Nicolas Pouillard
2007-05-13  0:27             ` ketti
2007-05-13  1:05               ` Christian Stork
2007-05-13 10:50                 ` Nicolas Pouillard
2007-05-13  5:52             ` brogoff
2007-05-13  7:36               ` skaller
2007-05-13 13:12                 ` Jacques Carette

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=200705120547.06083.jon@ffconsultancy.com \
    --to=jon@ffconsultancy.com \
    --cc=caml-list@yquem.inria.fr \
    --cc=skaller@users.sourceforge.net \
    /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).