<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general">
    <title>gmane.comp.lang.felix.general</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2935"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2934"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2933"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2932"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2931"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2930"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2929"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2928"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2927"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2926"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2925"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2924"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2923"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2922"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2921"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2920"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2919"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2918"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2917"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.felix.general/2916"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2935">
    <title>Dictionary type implemented</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2935</link>
    <description>&lt;pre&gt;I have implemented a basic dictionary type.

Here's how to use it. First for convenience we need these:


fun dflt : opt[string] -&amp;gt; string =
| Some ?x =&amp;gt; x
| None =&amp;gt; "NONE"
;

fun dflt : opt[string * string ] -&amp;gt; string * string =
| Some ?x =&amp;gt; x
| None =&amp;gt; "NONE","NONE"
;


Now we can do:

/////////
var x = strdict[string] ();
add x "Hello" "World";
println$ dflt$ get x "Hello"; 
println$ "Missing .." + dflt (get x "silly");
////////

you can also write:

x.add "Hello" "World" 

using the operator . style. We get:

~/felix&amp;gt;flx jj
World
Missing ..NONE

The "dflt" function is  a way to map:

dflt: opt[T] -&amp;gt; T

so you don't have to keep matching against Some/None.

You can delete entries:

/////////
var found = del x "Hello";
println$ "Found="+ str found;
found = del x "Hello";
println$ "Found="+ str found;
//////

which gives:

Found=true
Found=false

Remember, "del" is a generator, you cannot ignore the returned value!
Or Felix will silently remove the result variable, and thence the deletion!

You can make a &lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-26T03:44:14</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2934">
    <title>Re: plugin data</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2934</link>
    <description>&lt;pre&gt;
On 25/05/2012, at 12:52 PM, Michael Maul wrote:


At some point it will be eliminated :)

There are two ways, as mentioned in an earlier mail, to do this:

(1) Use flx_pkgconfig

To do this you just change the config file to an *.fpc file
and follow the conventions:

server_root: /usr/local
FLX_DATA: whatever ...

Then you can:

var flx_data = popen("flx_pkgconfig --path=/somewhere --field=FLX_DATA --rec");

The important thing about this is that its easy to have multiple
configs, and, it's possible to have dependencies. For example

Requires: default_c_compiler_paths

delegates the problem of finding the paths for #include display
of compiler specialist includes to another package.

Of course flx_pkgconfig could be put in the library,
or, it can be made into a plugin.

(2) The other way is to use Felix script for the config (as now),
but load it as a plugin. Or even

eval(".... ")

or similar (run "flx" inside a Felix program to generate a shared
lib which you then link to "on the fly").


--
john skalle&lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-25T04:17:38</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2933">
    <title>plugin data</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2933</link>
    <description>&lt;pre&gt;At present the plugins don't hyperlink correctly because the data
format is wrong. They're being fed the server_config.cfg file
which has stuff like:

# Configuration file for webapp
delay=0.05
port=8080
server_root=.
document_root=$server_root/html
C_PATH = $INSTALL_ROOT/lib/rtl,/usr/local/include,/usr/include,/usr/include/c++/4.6.2,/usr/local/include,/usr/include,/usr/include/c++/4.2.1,/usr/include/c++/4.2.1/x86_64-apple-darwin10,/usr/include/c++/4.4.3,/usr/include/c++/4.4.3/x86_64-linux-gnu,/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include
FLX_PATH=$INSTALL_ROOT/lib
FDOC_PATH=$DOCS,$DOCS/doc,$DOCS/web
FLX_PKGCONFIG=$INSTALL_ROOT/config
DB = $server_root/db/wiki.db

in it. The plugins require

C_PATH += /usr/include/c++/4.2.1
C_PATH += /usr/include/c++/4.2.1/x86_64-apple-darwin10
C_PATH += /usr/include/c++/4.4.3
C_PATH += /usr/include/c++/4.4.3/x86_64-linux-gnu
C_PATH += /usr/lib/gcc/x86_64-linux-gnu/4.4.3/include

instead. Although the wiki config does try to build a native Felix
representation of this data, it&lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-25T00:47:42</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2932">
    <title>Re: [felix] ncurses on OS, a note</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2932</link>
    <description>&lt;pre&gt;
On 25/05/2012, at 3:40 AM, Raoul Duke wrote:


LOL!


Ah, i would so love to do that: I have the keyboard but .. my eyes suck.
I can't focus on the screen if I put another keyboard in front of the
MacBook.

Maybe it doesn't matter. Been playing with CodeMirror (javascript) and
D3 (Javascript) and Node.js (Javascript).. and discovered CodeMirror
is installed on GitHub and you can edit right there with your browser.

--
john skaller
skaller-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f&amp;lt; at &amp;gt;public.gmane.org
http://felix-lang.org




------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
&lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-24T23:38:16</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2931">
    <title>Re: [felix] ncurses on OS, a note</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2931</link>
    <description>&lt;pre&gt;
the underlying argument i always put forward is that, essentially:
people suck. ergo, technology sucks. qed.

or something. like how the usb keyboard i have on this macbook pro
stops working sometimes for no good reason. like *it just effing died
right when i was trying to type the "ing" in "something"* and i had to
switch to the laptop's own keyboard. oh now it is back. WHATEVER.

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
&lt;/pre&gt;</description>
    <dc:creator>Raoul Duke</dc:creator>
    <dc:date>2012-05-24T17:40:00</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2930">
    <title>Extending flx_pkgconfig</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2930</link>
    <description>&lt;pre&gt;I'm extending the capabilities of flx_pkgconfig, so it can query pkgconfig (*.pc)
databases.

pkgconfig is a seriously bad program. It is very badly written,
it is full of bugs, and it has limited capabilities (which is why
flx_pkgconfig was written). Indeed, it has a very specialised application
and it can't even handle that properly.

I have extended flx_pkgconfig (next commit) to add;

--help

well it should always have had that ..

--extension=fpc

to set the extension to look for, if you set pc it will find pkgconfig files
instead of flx_pkgconfig files (will play with this to see if both can
be queried at once later).

I have added variables as used by pkgconfig:

prefix = /usr/local
lib = ${prefix}/lib

Libs: -L${lib} -lmylib

Also blank lines are tolerated, and lines starting with # are skipped.
pkgconfig allows trailing # comments which are not handled yet.

Pkgconfig also doesn't allow comma separators: some options go
like this:

-W1,linkeropt,-W1

and have embedded commas, so I'll have to r&lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-24T10:53:08</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2929">
    <title>Re: [felix] ncurses on OS, a note</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2929</link>
    <description>&lt;pre&gt;
On 24/05/2012, at 2:39 PM, john skaller wrote:


Grrrrrrrr   ... but only just. The arrow keys work.
but on the **^&amp;amp;%^$$ ing MacBookPro, with its utterly stupid half size
arrow keys and missing Home/End keypad keys, and ridiculous
additional Apple key .. none of the other combinations (like Shift Left Arrow,
which is marked "Home" on the keyboard) work, they just emit stupid
escape sequence that xterm-color doesn't grok.

The terminal program allows mapping these combinations to anything,
and works with just about any terminal type, but it's a major pain now
to go find what the terminfo data base says (since its compiled ..)
and fix the keys.

It's probably easier to add a "learning mode" to the application so
you can just press the key you want for each function.

Keyboard mapping is a pain. Keyboard mapping when 10 different 
application and OS layers intervene is a nightmare.


--
john skaller
skaller-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f&amp;lt; at &amp;gt;public.gmane.org
http://felix-lang.org




----------------------------&lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-24T10:19:25</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2928">
    <title>Re: [felix] ncurses on OS, a note</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2928</link>
    <description>&lt;pre&gt;
On 24/05/2012, at 2:29 PM, john skaller wrote:



Grrr .. works now I call keypad() *after* initscr :)

--
john skaller
skaller-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f&amp;lt; at &amp;gt;public.gmane.org
http://felix-lang.org




------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
&lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-24T04:39:50</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2927">
    <title>ncurses on OS, a note</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2927</link>
    <description>&lt;pre&gt;I'm writing some ncurses stuff to perhaps help manage Felix
installations etc. 

I found the installed version on OSX doesn't work. I found this note:

http://www.uponmyshoulder.com/blog/2010/fix-ncurses-in-os-x-10-6-3/

and I'm trying it out. Nope. Press an arrow key and still get the f'ing escape
sequence, not interpreted by ncurses as it should be.

Unix is such .... Terminals. Ye gads, how utterly archaic is this concept?
We've had actual keyboards and screens on PCs for a while.

Ah well. No idea how to proceed, except perhaps make a Felix
resource data base to replace the crap. I note, the terminal emulators
all work fine.



--
john skaller
skaller-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f&amp;lt; at &amp;gt;public.gmane.org
http://felix-lang.org




------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint securit&lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-24T04:29:30</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2926">
    <title>windows utils</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2926</link>
    <description>&lt;pre&gt;gnuwin32.sourceforge.net/

--
john skaller
skaller-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f&amp;lt; at &amp;gt;public.gmane.org
http://felix-lang.org




------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
&lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-23T12:42:23</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2925">
    <title>automagical record coercions (record subtyping)</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2925</link>
    <description>&lt;pre&gt;At present if you have a function accepting a record with
the set of fields F, you can call it with a record with
the set of fields G, provided F is subset of G, and,
you *explicitly* coerce G to F:

typedef F = (a:int);
typedef G = (a:int, b:int);
fun f(x:F)=&amp;gt;x.a;
var g = (a=1, b=2);
println$ f( g :&amp;gt;&amp;gt; F);

If you leave off the coercion, you will get this:

Client Error binding expression (f g)
CLIENT ERROR
[lookup_name_with_sig] Can't find f of struct  {a:(int);b:(int);}
In /Users/johnskaller/felix/./ft.flx: line 5, cols 9 to 10
4: var g = (a=1, b=2);
5: println$ f( g);
           **
6:


There's an argument to provide "some kind of subtyping" here:
a G "is an F" (it just has extra fields). The coercion we use has
a common generic name in algebra: "the forgetful functor",
which is a structure preserving map that simply "forgets" some
of its domains structure.


If we could do automagical coercions, you could write "generic"
functions and just call them with any record which extended
the parameter type, with&lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-22T00:07:35</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2924">
    <title>Re: type checking</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2924</link>
    <description>&lt;pre&gt;On Sun, May 20, 2012 at 2:37 PM, john skaller
&amp;lt;skaller-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f&amp;lt; at &amp;gt;public.gmane.org&amp;gt; wrote:

some day! for my day job, i'm stuck in java, and for my
extra-curricular work, i'm stuck in python &amp;amp; haxe for a while yet...
:-)

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
&lt;/pre&gt;</description>
    <dc:creator>Raoul Duke</dc:creator>
    <dc:date>2012-05-21T15:58:59</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2923">
    <title>type checking</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2923</link>
    <description>&lt;pre&gt;
On 21/05/2012, at 12:22 AM, Raoul Duke wrote:


It's more than that: at least Hindley Milner inference can't handle
everything you want, eg monomorphisation restriction, can't
pass polymorphic functions, etc. In Ocaml I find the biggest problems:

(a) I don't know what the a type a function argument is, my solution
is to write "blob" and then look at the error message :)

(b) I get an error on correct code, because some incorrect code
somewhere fixed the type, and the ocaml system isn't smart enough
to tell me where it deduced the type.

I believe some limited mixing of overloading and inference is possible,
but the two features tend to conflict.

Also, I believe correct programming is related to thinking properly
about types and for me that's easier if I can see encodings of them
in a few places.



Well you should try that in Felix and let me know what needs to be
done to make the conversion reasonably simple, and the result
as readable (or more readable :)

Particularly attention to portability of the sc&lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-20T21:37:15</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2922">
    <title>Re: Java in Felix</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2922</link>
    <description>&lt;pre&gt;
syntax is the vietnam of programming languages? ('course in viet nam
it was called appropriately enough 'Resistance War Against America')

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
&lt;/pre&gt;</description>
    <dc:creator>Raoul Duke</dc:creator>
    <dc:date>2012-05-20T14:29:45</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2921">
    <title>Re: [felix] Re: Objects in Felix</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2921</link>
    <description>&lt;pre&gt;On Sat, May 19, 2012 at 11:44 PM, john skaller
&amp;lt;skaller-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f&amp;lt; at &amp;gt;public.gmane.org&amp;gt; wrote:

well, they do use sexprs at least. code that is written to take
advantage of loosey goosey forms of dynamic typing with runtime
autocasting would presumably be hard to convert no matter what the
surface syntax is? so i'd guess that if the standard libraries are
written to take advantage of that, and do things like have differing
return types for the same routine depending on overall state, then
those would be hard to type/tame. clojure uses the jdk so that might
make it easier overall than it was for racket? haven't used either
enough to recall how loosey goosey their typing is.

philip wadler had a paper about making a type system that lets you
have a firewall between dynamic and static code that statically
guarantees the dynamic code can't break the static code, i think. so
that was another interesting tool along the range of dynamic/static.

shen/qi-lisp offer both an untyped and a type check&lt;/pre&gt;</description>
    <dc:creator>Raoul Duke</dc:creator>
    <dc:date>2012-05-20T14:22:51</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2920">
    <title>Java in Felix</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2920</link>
    <description>&lt;pre&gt;And here was have it:


// define an interface with one method

interface A { 
  geta: unit -&amp;gt; int; 
}

// extend it with a second method

interface B extends A { 
  getb: unit  -&amp;gt; int; 
}

// implement a class for the first interface A

object anA (a:int) implements A = { 
  omethod fun geta()=&amp;gt; a; 
}

// implement a class for the extended interface B,
// by inheriting from the class 'anA' we just defined

object anB(a:int, b:int) extends anA(a) implements B = { 
  omethod fun getb()=&amp;gt; b;
}

// Apply the class constructor to make an object

var bb = anB(22,33);

// prove it does what we expected

println$ bb.geta(), bb.getb();
 

Ok, so: I'm thinking of tweaking the syntax more of course.

'face' instead of interface because I've been interfacing
with facebook for too long.

'obj' instead of 'object' so no one can claim Felix is actually
object oriented.

'omethod' need to be replaced. Perhaps "method" or
just "meth" would do, though the latter suggests the drug
of choice for the very poor or the very rich.&lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-20T14:01:52</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2919">
    <title>Objects in Felix: Value extensions</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2919</link>
    <description>&lt;pre&gt;
On 20/05/2012, at 7:05 PM, john skaller wrote:


And I missed the fun part:

var xt = extend x,y, (a 1) with d end;
println$ xt.getit();

var xt2 = extend x,y, (a 1) with (object () = { omethod fun getit() =&amp;gt; "it2"; }) () end;
println$ xt2.getit();


var objk42 = extend x,y, (a 1) with (object (var k:int) = { omethod fun getk() =&amp;gt; k; }) 42 end;
println$ objk42.getk();

Note that we're synthesising new objects. The "object" construction is NOT an object,
its an object FACTORY (i.e. a function returning an object .. which is just a record).

It's the same as a Java (or C++) class: you have to call the "constructor" on arguments
to get an actual object.

Is this what we really want? 

Certainly, the above is useful. But really, I think we wanted to merge together
the object factories, not objects, to get a new factory.

In other words we want to merge

T1 -&amp;gt; R1
T2 -&amp;gt; R2
...
Tn -&amp;gt; Rn

into

T1 * T2 * ... * Tn -&amp;gt; R

where R is the the merger of the record types R1  to Rn.

Alternatively, instead of T1 * .. &lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-20T10:58:18</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2918">
    <title>Objects in Felix: Value extensions</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2918</link>
    <description>&lt;pre&gt;So here's object lambdas:

//////////
val x = (a=1, b=2, c="m");
val y = (c=9.9, s="Hello");

typedef X = (a:int, b:int, c:string);
typedef Y = (c:double, s:string);
typedef XYZ = extend X, Y with (k:string) end;

var xyz:XYZ = extend x,y with (k="world") end;

println$ xyz.a, xyz.b, xyz.c, xyz.s, xyz.k;
println$ "Felix Rocks";

var a = object (x:int) = { omethod fun getx()=&amp;gt;x; };
println$ (a 1).getx();
var b = a 2;
println$ b.getx();

var d = (object () = { omethod fun getit() =&amp;gt; "it"; })();
println$ d.getit();
////////////

The "no argument" object is a bit messy, you have to use () 
for the argument, and then apply the lambda to () to instantiate it
(remember, we're declaring a function so we have to apply it
to get a record out of it).

I also don't like needing to say

d.getit()

i.e. to have to put the () there, this works too:

#(d.getit)

and of course

getit d ()

.Of couse ..


fun ff (var x:int) = { 
  return (getx =  x); 
};
println$ (ff 1).getx;

but that's not getting x, it is x :)

--
john &lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-20T09:05:00</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2917">
    <title>Re: [felix] Re: Objects in Felix</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2917</link>
    <description>&lt;pre&gt;
On 20/05/2012, at 12:16 PM, Raoul Duke wrote:


I guess it depends on the base language: Racket and Clojure are
both Lisp/Scheme dialects, right?

--
john skaller
skaller-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f&amp;lt; at &amp;gt;public.gmane.org
http://felix-lang.org




------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
&lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-20T06:44:32</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2916">
    <title>Re: [felix] Re: Objects in Felix</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2916</link>
    <description>&lt;pre&gt;On Sat, May 19, 2012 at 12:32 AM, john skaller
&amp;lt;skaller-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f&amp;lt; at &amp;gt;public.gmane.org&amp;gt; wrote:

while i sorta agree, there are things like Typed Racket and Typed
Clojure which seem to have gone from dynamic to static and sorta
succeeded?

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
&lt;/pre&gt;</description>
    <dc:creator>Raoul Duke</dc:creator>
    <dc:date>2012-05-20T02:16:37</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.felix.general/2915">
    <title>Objects in Felix: Value extensions</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.felix.general/2915</link>
    <description>&lt;pre&gt;
On 19/05/2012, at 8:27 PM, john skaller wrote:



Ok, so I now think: the first stage in making the Java like syntax
for objects with extensions is anonymous objects:

var o = object (arguments) implements X = {
omethod ...
omethod ...
};


Note that the "implements X" has now been made optional.
If you give it, the compiler can type check it, otherwise the
type is deduced (since it is just a function!).

It's not clear how useful the (arguments) are to an anonymous object,
since you would have to apply it (since its a function) just as you would
for a lambda (anonymous function).

So once we have anonymous objects we can immediate use the

extend x, y, z with (object (arguments) = { 
omethod ...
}) (args) end

syntax .. as a special case when there's no arguments

extend x, y, z with object  {...} end

and thence it's pretty clear:

object derived (arguments) extends x,y,z {
omethod ...
}

is just sugar for the alternate value extension syntax + anonymous objects,
and we're back to something &lt;/pre&gt;</description>
    <dc:creator>john skaller</dc:creator>
    <dc:date>2012-05-19T23:46:30</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.lang.felix.general">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.lang.felix.general</link>
  </textinput>
</rdf:RDF>

