Browse thread
Question on writing efficient Ocaml.
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | brogoff <brogoff@s...> |
| Subject: | Re: [Caml-list] Question on writing efficient Ocaml. |
On Fri, 5 Jan 2007, Nathaniel Gray wrote:
> On 12/29/06, Mattias Engdegård <mattias@virtutech.se> wrote:
> > Is there a reason for this? To my innocent eyes, code like
> >
> > type length = Length of int
> >
> > looks quite reasonable and could be useful at times.
>
> I agree. Sadly, the ocaml devs don't.
>
> http://caml.inria.fr/mantis/view.php?id=3978
>
> As Xavier points out, one can use modules to hide basic types, but
> this is pretty clumsy in practice. There's rumored to be a solution
> using phantom types, but my attempts don't work:
You need to use modules to make phantom types work. Something like this
module type BOINK =
sig
type 'a t
val inj : int -> 'a t
val prj : 'a t -> int
val plus : 'a t -> 'a t -> 'a t
end;;
module Boink : BOINK =
struct
type 'a t = int
let inj n = n
let prj t = t
let plus x y = x + y
end;;
let f : string Boink.t = inj 20;;
let g : int Boink.t = inj 30;;
Boink.plus f g;;
I didn't compile that, but you get the idea...
-- Brian