I have some trouble with this, I found this note:

  | DCL_newtype t ->
      (* Add the newtype to the sym_table. *)
      add_symbol ~pubtab ~privtab symbol_index id (SYMDEF_newtype t);

      (* Create an identity function that doesn't do anything. *)
      let piname = TYP_name (sr,id,[]) in

      (* XXX: What's the _repr_ function for? *)
      let n_repr = Flx_mtypes2.fresh_bid counter_ref in

      (* Add the _repr_ function to the symbol table. *)
      add_symbol ~pubtab ~privtab n_repr "_repr_" (SYMDEF_fun (
...
      (* Add the _make_ function to the sym_table. *)
      add_function priv_name_map ("_make_" ^ id) n_make;

   
Answer:

module X {
  open C_hack;
  type pi = new int * int;
  fun fst(x:pi):int => (_repr_ x).(0);
  fun snd(x:pi):int => (_repr_ x).(1);
  fun mkpi(x:int,y:int):pi=>_make_pi(x,y);

The _repr_ thing grants access to a Felix abstract type's definition.
For a type "pi" here, _repr_pi is a *private* function of the module X.
This allows us to define accessor functions to abstract type pi in module
X but not outside module X, thus providing information hiding.

Similarly a "make_pi" function is provided to actually construct
a value of that type. I may get rid of this, now we have "ctor",
since that can make a value using just _repr I think.

At present it seems these things do not work with polymorphism.
I need to fix that because "darray" requires this feature,
otherwise

  d++

is interpreted as incrementing its representation as well as itself,
and the representation happens to be a pointer which can be
incremented .. leading to an ambiguity. Hiding the representation
will resolve the ambiguity.


--
john skaller
skal...@users.sourceforge.net





------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to