caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: "\"Mark\"" <mark@proof-technologies.com>
To: <gabriel.scherer@gmail.com>
Cc: <caml-list@inria.fr>
Subject: Re: [Caml-list] accessing the type of a polymorphic parameter
Date: Fri, 26 Oct 2012 20:39:02 +0100	[thread overview]
Message-ID: <1351280342705@names.co.uk> (raw)

Superb, thanks David, Lilian, Gabriel.  This may be just about sufficient
for my purposes.  I'll have a play.

As well as predefined OCaml primitive datatypes, what would perfect for me
would be the ability to also do newly created abstract datatypes, and
composite datatypes like lists of strings.  Are either of these possible
with your solutions?

Mark.

on 26/10/12 7:29 PM, David Allsopp <dra-news@metastack.com> wrote:

> ...
> For this explicit example, you could write:
>
> let foo x =
> match Obj.tag (Obj.repr x) with
> x when x = Obj.int_tag -> ...
> | x when x = Obj.string_tag -> ...
>
> but this probably isn't what you're after. The type of foo will also be 'a
> -> '_b so you won't get any help from the type system in the calling of
foo.
> ...


on 26/10/12 7:50 PM, Lilian Jean BESSON <lilian.besson@ens-cachan.fr> wrote:

> ...
> In my code "surcharge.ml", the main functions are "typage" : 'a ->
> string, and "dump" : a' -> string.
> Examples:
> #9> Surcharge.typage;;
> - : 'a -> string = <fun>
> #10> Surcharge.typage 4  (* ok *);;
> - : string = "int"
> #11> Surcharge.typage 8.7  (* ok *);;
> - : string = "float"
> #12> Surcharge.typage "ok";; (* ok *)
> - : string = "string"
> #13> Surcharge.typage 'k'  (* not ok *);;
> - : string = "int"
> #14> Surcharge.typage [4]  (* not ok *);;
> - : string = "array"
> #15> Surcharge.typage [|4|];;
> - : string = "array"
> #16> Surcharge.typage cos  (* not ok *);;
> - : string = "unknown"
> But this function "typage" is very limited : no difference between arrays
> and strings etc...
> ...


on 26/10/12 8:24 PM, Gabriel Scherer <gabriel.scherer@gmail.com> wrote:

> ...
> Long answer: I presume that your implementation works for any type
> providing some fixed set of operations, but that you wish those
> operations to be implemented differently for each type. You can define
> a type ('a ops) describing these operations on the type 'a (as a
> record of functions for example), and use the polymorphic type ('a ->
> 'a ops -> foo) instead of ('a -> foo) to write your function.
> Depending on your specific needs there may be slightly different
> approaches (using a algebraic representation of runtime types rather
> than a typeclass-like dictionary), a very general way being described
> in this blog post by Alain Frisch :
> http://www.lexifi.com/blog/dynamic-types
> It could help to have more details on your needs to suggest a better
> solution.
>
> Wrong answer: yes, using Obj.magic you can access the runtime
> representation of values. You can't distinguish between boolean and
> integers and the empty list, but worrying about that is for the
> coward, let's shoot yourself in the foot -- starting by reading the
> documentation on the representation of OCaml values, chapter
> "interacting with C" in the manual.
> ...

             reply	other threads:[~2012-10-26 19:39 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-26 19:39 "Mark" [this message]
2012-10-26 19:58 ` Gabriel Scherer
2012-10-26 20:01   ` Gabriel Scherer
  -- strict thread matches above, loose matches on Subject: below --
2012-10-26 18:01 "Mark"
2012-10-26 19:23 ` Gabriel Scherer
2012-10-26 21:31 ` Anil Madhavapeddy

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=1351280342705@names.co.uk \
    --to=mark@proof-technologies.com \
    --cc=caml-list@inria.fr \
    --cc=gabriel.scherer@gmail.com \
    /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).