On Sun, 2007-07-08 at 13:11 -0400, Sandro Magi wrote:
> I'm just looking into Felix, and noticed that it supports type classes
> and modules. Are the modules like ML modules? If so, I was wondering
> whether you were aware of the paper "Modular Type Classes", where type
> classes are derived as a restricted use of ML modules:
> 
> http://www.cse.unsw.edu.au/~chak/papers/DHC07.html

Yes, i've read it. Felix has modules, but at present no 
modular functors. Modules are basically just namespaces
at present. Also, there are no separate interfaces:
there are private symbols which aren't accessible to the
public, but you can't abstract a function in a module
by constraining it to a more abstract signature, as
you can in Ocaml or ML.

Actually I'm looking to unify modules, typeclasses and
OO classes into a single construction -- C++ pretty much
has that already. Felix 3 kinds have stronger semantics,
but the distinction is unpleasant.

> Might help simplify the compiler. Also, the reference manual does not
> describe the module or type class language; is there are any reference
> on those I can browse?

Nope, haven't got around to writing it yet. Look in
library directory:

        lib/flx_tclass.flxh   // typeclasses
        lib/flx_ctypes.flxh   // instances for C data types

* Typeclasses support multiple type arguments.

* Typeclasses can have virtual (specialisable) functions 
  and procedures

* Default definitions are allowed.

* non virtual private helpers are allowed for the defaults

* public non-virtuals are allowed (available in all instances)

* axioms, reductions, and lemmas are allowed, to specify
  semantics. reductions are axioms of the form a => b which
  tell the compiler to rewrite terms matching a to b.
  Lemmas are propositions which can be proven by a theorem
  prover without help. Felix generates a *.why file, which
  can be fed to Ergo, or some other prover via Why.
  This work is unfinished.

* you can open a typeclass:

        open Eq[int];

  or pass to a function:

  fun f[t where Eq[t]] (x:t, y:t)=> x == y;
        // fun eq(x,y) written x == y, available
        // from typeclass Eq

  which is just the same as opening it in the function,
  except it looks nice (part of the interface).
  Haskell would write this

        f: Eq t => t -> t -> bool 



-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to