Re: Must have SINGLE input/Arg.

"'John Nilsson' [email protected] [concatenative]" <[email protected]> Tue, 12 Aug 2014 17:07:09 -0700 (PDT)
Newsgroups gmane.comp.lang.concatenative
Message-ID <1407888429814.6c0e21ec@Nodemailer>
------Nodemailer-0.5.0-?=_1-1407888429979
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Im not sure that is the case. As I understand it it should be possible even=
 for a total language to reason about infinite structures.


Here's a paper on=C2=A0copatterns=C2=A0http://www.cs.mcgill.ca/~bpientka/pa=
pers/icfp13.pdf=C2=A0on termination and productivity of those.







Does lazy exclude total btw?







If you do publish something about that language, it would be interesting to=
 read :)




BR,

John
=E2=80=94
Sent from Mailbox

On Tue, Aug 12, 2014 at 5:16 AM, John Meacham [email protected]
[concatenative] <[email protected]> wrote:

> An issue with no bottom is that having it is necessary to properly reason
> about infinite data structures. Now, as to whether you actually want
> infinite data structures in your language is another issue, but with my
> Haskell background I gotta say they are darn handy. :)
> I actually have a concatinative lazy language I wrote called 'levity' (a
> play on joy) for use internally by a project a while ago. It had some
> interesting properties, I should write up the core as it may be interesti=
ng
> to other fans of concatinative languages even if the code itself is
> probably not reusable.
> Among other things, it had its symbols in compositional order and was lis=
t
> based instead of stack based, it just happened that functions implicitly
> acted upon the 'current list'. 'f g h'  means f(g(h(current list))).. But
> by having it in compositional order, something like (1 2 3) actually ende=
d
> up being a list in the order 1, 2, 3, and (1 2 2 1 +) ended up also being
> (1 2 3). (..) was just syntactic sugar for 'run the symbols between the
> parens on an empty stack and take the resulting stack as your new list.
> Due to where I was using the language, as part of a strategy specificatio=
n
> system for a theorem prover, I was able to actually keep it fully pure in
> the mathematical sense so laziness was a no-brainer without side effects =
to
> worry about.
>     John
> On Mon, Aug 11, 2014 at 5:26 PM, John Nilsson [email protected]
> [concatenative] <[email protected]> wrote:
>>
>>
>> I was thinking that composition would also be partial evaluation. So the
>> benefits of curried functions should be the same.
>>
>> Regarding evaluation I'm curious if there is something interesting to be
>> found by looking at kappa calculus or similar first order system instead=
 of
>> full lambda calculus. Or in any case, aiming for a total language, so no
>> bottom. Looking around recent papers from various researches it seems to=
 me
>> that one could get quite far that route. Possibly one has to introduce s=
ome
>> disciplined way to do higher order things sooner or later though.
>>
>> BR,
>> John
>>
>>
>>
>> On Mon, Aug 11, 2014 at 9:39 PM, John Meacham [email protected]
>> [concatenative] <[email protected]> wrote:
>>
>>>
>>>
>>> However, they actually are not isomorphic and behave differently during
>>> beta reduction, due to being able to perform shared computation in betw=
een
>>> the passing of the arguments. for instance
>>>
>>> f =3D \x -> let bx =3D x^10 in \y -> bx + y
>>>
>>> when applied to just one argument will share the computation of
>>> calculating the tenth power with all of its uses.
>>>
>>> When working with a lazy language you also have the fact that a tuple h=
as
>>> another value, namely the tuple itself being bottom in addition to each=
 of
>>> its components being bottom which means tupled arguments are different =
than
>>> fully applied curried ones as they can take on more values.
>>>
>>> These are all good and useful things, being able to control sharing and
>>> evaluation via proper use of currying is a very powerful tool for many
>>> languages.
>>>
>>>        John
>>>
>>>
>>>
>>> On Mon, Aug 11, 2014 at 12:17 PM, 'John Nilsson' [email protected]
>>> [concatenative] <[email protected]> wrote:
>>>
>>>>
>>>>
>>>> One problem with currying is that it makes (A,B) -> C !=3D A -> B -> C=
 !=3D
>>>> B -> A -> C
>>>>
>>>> When in practice they should all be equal.
>>>>
>>>> My thinking is that this could be addressed by just making them equal =
so
>>>> that
>>>>
>>>> (D -> B) (A,B -> C) =3D (A,D -> C)
>>>>
>>>> Now this gets a little problematic if we have (A,A -> A)
>>>>
>>>> So I suggest that we add bindings to the type and se argument lists no=
t
>>>> as ordered tuples, but more like first class environments.
>>>>
>>>> Thus the type above would be (x::A,y::A -> z::A) and composition would
>>>> work as the ABCD case above.
>>>>
>>>> To allow composition with arbitrary name we can add a rename type so t=
hat
>>>>
>>>>  (x:a) (x::A,y::A -> z::A) =3D (a::A,y::A -> z::A)
>>>>
>>>> This would also mean that it is an environment with bindings that gets
>>>> threaded through the program, and not a stack.
>>>>
>>>> BR,
>>>> John
>>>> --
>>>> Sent from Mailbox <https://www.dropbox.com/mailbox>
>>>>
>>>>
>>>> On Mon, Aug 11, 2014 at 6:07 PM, chris glur [email protected]
>>>> [concatenative] <[email protected]> wrote:
>>>>
>>>>>
>>>>>
>>>>> The 'impedance mismatch' [who introduced that term for
>>>>> non-ElectricalEngineers?] problem of different numbers of
>>>>> inputs & outputs of functions, is apparently the motivation
>>>>> for the idea of passing a SINGLE stack.
>>>>> And the ideas of 'currying'.
>>>>> IMO, what matters, is reducing the human mental load.
>>>>> Hiding N mental-chunks, by wrapping them in a stack
>>>>> is fraudulent.
>>>>> Yes, point-free is great. Everything 'popping-out' is just "it".
>>>>> take it | wash it | cook it| eat it
>>>>> Without even thinking about the theoretical aspects of
>>>>> impedance mismatch when multiple input-args are needed,
>>>>> it was obvious that the following 'schematic' does it:
>>>>> -> set Arg2
>>>>> -> set Arg3
>>>>> Arg1-> DoA -> DoB(A,Arg2) -> DoC(B,Arg3) -> FinalResult.
>>>>> So you set the extra Args, before the main composition starts,
>>>>> and the relevant functions know where to get their extra args.
>>>>>
>>>>> Sure, it's not as neat looking, but the mental-load is less
>>>>> than wrapping multiple args, to look like 'unary'.
>>>>>
>>>>> =3D=3D Chris Glur.
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> John Meacham - http://notanumber.net/
>>>
>>>
>>=20=20
>>
> --=20
> John Meacham - http://notanumber.net/
------Nodemailer-0.5.0-?=_1-1407888429979
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/htm=
l4/strict.dtd">
<html>
<head>
</head>






=20
<body style=3D"background-color: #fff;">
<span style=3D"display:none">&nbsp;</span>

<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id=3D"ygrp-mlmsg" style=3D"position:relative;">
  <div id=3D"ygrp-msg" style=3D"z-index: 1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->

    <div id=3D"ygrp-text" >
=20=20=20=20=20=20
=20=20=20=20=20=20
      <p>
<span id=3D"mailbox-conversation">Im not sure that is the case. As I unders=
tand it it should be possible even for a total language to reason about inf=
inite structures.<div><br></div>
<div>Here's a paper on=C2=A0copatterns=C2=A0<a href=3D"http://www.cs.mcgill=
.ca/~bpientka/papers/icfp13.pdf">http://www.cs.mcgill.ca/~bpientka/papers/i=
cfp13.pdf</a>=C2=A0on termination and productivity of those.</div>
<div><br></div>
<div><br></div>
<div>Does lazy exclude total btw?</div>
<div><br></div>
<div><br></div>
<div>If you do publish something about that language, it would be interesti=
ng to read :)</div>
<div><br></div>
<div>BR,</div>
<div>John</div></span><div class=3D"mailbox_signature">=E2=80=94<br>Sent fr=
om <a href=3D"https://www.dropbox.com/mailbox">Mailbox</a>
</div>
<br><br><div class=3D"gmail_quote"><p>On Tue, Aug 12, 2014 at 5:16 AM, John=
 Meacham [email protected] [concatenative] <span dir=3D"ltr">&lt;<a href=3D"=
mailto:[email protected]" target=3D"_blank">concatenative@yahoo=
groups.com</a>&gt;</span> wrote:<br></p><blockquote class=3D"gmail_quote" s=
tyle=3D"border-left:1px #ccc solid;">
<span>=C2=A0</span><div id=3D"ygrp-mlmsg">
  <div id=3D"ygrp-msg">


    <div id=3D"ygrp-text">
=20=20=20=20=20=20
=20=20=20=20=20=20
      <p></p>
<div dir=3D"ltr">An issue with no bottom is that having it is necessary to =
properly reason about infinite data structures. Now, as to whether you actu=
ally want infinite data structures in your language is another issue, but w=
ith my Haskell background I gotta say they are darn handy. :)<div>

<br></div>
<div>I actually have a concatinative lazy language I wrote called 'levity' =
(a play on joy) for use internally by a project a while ago. It had some in=
teresting properties, I should write up the core as it may be interesting t=
o other fans of concatinative languages even if the code itself is probably=
 not reusable.</div>

<div><br></div>
<div>Among other things, it had its symbols in compositional order and was =
list based instead of stack based, it just happened that functions implicit=
ly acted upon the 'current list'. 'f g h' =C2=A0means f(g(h(current list)))=
.. But by having it in compositional order, something like (1 2 3) actually=
 ended up being a list in the order 1, 2, 3, and (1 2 2 1 +) ended up also =
being (1 2 3). (..) was just syntactic sugar for 'run the symbols between t=
he parens on an empty stack and take the resulting stack as your new list.<=
/div>

<div><br></div>
<div>Due to where I was using the language, as part of a strategy specifica=
tion system for a theorem prover, I was able to actually keep it fully pure=
 in the mathematical sense so laziness was a no-brainer without side effect=
s to worry about.</div>

<div><br></div>
<div>=C2=A0 =C2=A0 John</div>
<div><br></div>
</div>
<div class=3D"gmail_extra">
<br><br><div class=3D"gmail_quote">On Mon, Aug 11, 2014 at 5:26 PM, John Ni=
lsson <a href=3D"mailto:[email protected]">[email protected]</a> [concatenative=
] <span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]">co=
[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"g=
mail_quote" style=3D"border-left:1px #ccc solid;">


<u></u>









=20
<div style=3D"background-color:#fff;">
<span>=C2=A0</span>


<div>
  <div>


    <div>
=20=20=20=20=20=20
=20=20=20=20=20=20
      <p></p>
<div dir=3D"ltr">I was thinking that composition would also be partial eval=
uation. So the benefits of curried functions should be the same.<div>
<div><br></div>
<div>Regarding evaluation I'm curious if there is something interesting to =
be found by looking at kappa calculus or similar first order system instead=
 of full lambda calculus. Or in any case, aiming for a total language, so n=
o bottom. Looking around recent papers from various researches it seems to =
me that one could get quite far that route. Possibly one has to introduce s=
ome disciplined way to do higher order things sooner or later though.</div>


<div><br></div>
<div>BR,<br></div>
<div>John</div>
<div><br></div>
</div>
</div>
<div class=3D"gmail_extra">
<br><br><div class=3D"gmail_quote">
<div><div class=3D"h5">On Mon, Aug 11, 2014 at 9:39 PM, John Meacham <a hre=
f=3D"mailto:[email protected]">[email protected]</a> [concatenative] <span di=
r=3D"ltr">&lt;<a href=3D"mailto:[email protected]">concatenativ=
[email protected]</a>&gt;</span> wrote:<br></div></div>
<blockquote class=3D"gmail_quote" style=3D"border-left:1px #ccc solid;">


<u></u>









=20
<div style=3D"background-color:#fff;">
<span>=C2=A0</span>


<div>
  <div>


    <div>
<div><div class=3D"h5">
=20=20=20=20=20=20
=20=20=20=20=20=20
      <p></p>
<div dir=3D"ltr">However, they actually are not isomorphic and behave diffe=
rently during beta reduction, due to being able to perform shared computati=
on in between the passing of the arguments. for instance<div>


<br></div>
<div>

f =3D \x -&gt; let bx =3D x^10 in \y -&gt; bx + y</div>
<div><br></div>
<div>when applied to just one argument will share the computation of calcul=
ating the tenth power with all of its uses.</div>
<div><br></div>
<div>When working with a lazy language you also have the fact that a tuple =
has another value, namely the tuple itself being bottom in addition to each=
 of its components being bottom which means tupled arguments are different =
than fully applied curried ones as they can take on more values.</div>




<div><br></div>
<div>These are all good and useful things, being able to control sharing an=
d evaluation via proper use of currying is a very powerful tool for many la=
nguages.</div>
<div><br></div>
<div>=C2=A0 =C2=A0 =C2=A0 =C2=A0John</div>
<div>




<br></div>
</div>
</div></div>
<div class=3D"gmail_extra">
<div><div class=3D"h5"><div><div>
<br><br><div class=3D"gmail_quote">On Mon, Aug 11, 2014 at 12:17 PM, 'John =
Nilsson' <a href=3D"mailto:[email protected]">[email protected]</a> [concatenat=
ive] <span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]"=
>[email protected]</a>&gt;</span> wrote:<br><blockquote class=
=3D"gmail_quote" style=3D"border-left:1px #ccc solid;">


<u></u>









=20
<div style=3D"background-color:#fff;">
<span>=C2=A0</span>


<div>
  <div>


    <div>
=20=20=20=20=20=20
=20=20=20=20=20=20
      <p>
<span>One problem with currying is that it makes (A,B) -&gt; C !=3D A -&gt;=
 B -&gt; C !=3D B -&gt; A -&gt; C</span></p>
<div><br></div>
<div>When in practice they should all be equal.</div>
<div><br></div>
<div>My thinking is that this could be addressed by just making them equal =
so that</div>
<div><br></div>
<div>(<span>D -&gt; B)=C2=A0</span><span>(A,B -&gt; C) =3D (A,D -&gt; C)</s=
pan>
</div>
<div><br></div>
<div>Now this gets a little problematic if we have (A,A -&gt; A)</div>
<div><br></div>
<div>So I suggest that we add bindings to the type and se argument lists no=
t as ordered tuples, but more like first class environments.</div>
<div><br></div>
<div>Thus the type above would be (x::A,<span>y::A -&gt; z::A) and composit=
ion would work as the ABCD case above.</span>
</div>
<div><span><br></span></div>
<div><span>To allow composition with arbitrary name we can add a rename typ=
e so that</span></div>
<div><span><br></span></div>
<div>
<span>(x:a)=C2=A0</span><span>(x::A,y::A -&gt; z::A) =3D=C2=A0</span><span>=
(a::A,y::A -&gt; z::A)</span>
</div>
<div><span><br></span></div>
<div><span>This would also mean that it is an environment with bindings tha=
t gets threaded through the program, and not a stack.</span></div>
<div><span><br></span></div>
<div><span>BR,</span></div>
<div><span>John</span></div>
<div>=E2=80=94<br>Sent from <a href=3D"https://www.dropbox.com/mailbox">Mai=
lbox</a>
</div>
<div>
<br><br><div class=3D"gmail_quote">
<p>On Mon, Aug 11, 2014 at 6:07 PM, chris glur <a href=3D"mailto:crglur@gma=
il.com">[email protected]</a> [concatenative] <span dir=3D"ltr">&lt;<a href=
=3D"mailto:[email protected]">[email protected]</a>=
&gt;</span> wrote:<br></p>
<blockquote class=3D"gmail_quote" style=3D"border-left:1px #ccc solid;">
<span>=C2=A0</span><div>
  <div>


    <div>
=20=20=20=20=20=20
=20=20=20=20=20=20
      <p>The 'impedance mismatch' [who introduced that term for<br>
non-ElectricalEngineers?] problem of different numbers of<br>
inputs &amp; outputs of functions, is apparently the motivation<br>
for the idea of passing a SINGLE stack.<br>
And the ideas of 'currying'.<br>
IMO, what matters, is reducing the human mental load.<br>
Hiding N mental-chunks, by wrapping them in a stack<br>
is fraudulent.<br>
Yes, point-free is great. Everything 'popping-out' is just "it".<br>
take it | wash it | cook it| eat it<br>
Without even thinking about the theoretical aspects of<br>
impedance mismatch when multiple input-args are needed,<br>
it was obvious that the following 'schematic' does it:<br>
-&gt; set Arg2<br>
-&gt; set Arg3<br>
Arg1-&gt; DoA -&gt; DoB(A,Arg2) -&gt; DoC(B,Arg3) -&gt; FinalResult.<br>
So you set the extra Args, before the main composition starts,<br>
and the relevant functions know where to get their extra args.<br><br>
Sure, it's not as neat looking, but the mental-load is less<br>
than wrapping multiple args, to look like 'unary'.<br><br>
=3D=3D Chris Glur.<br></p>

    </div>
=20=20=20=20=20

=20=20=20=20
    <div style=3D"color:#fff;min-height:0;"></div>
</div>
</div>
</blockquote>
</div>
<br></div>
<p></p>

    </div>
=20=20=20=20=20

=20=20=20=20
    <div style=3D"color:#fff;min-height:0;"></div>


</div>



=20=20






</div>
</div>
</blockquote>
</div>
<br><br clear=3D"all"><div><br></div>
</div></div></div></div>
<div class=3D"class">-- <br>John Meacham - <a href=3D"http://notanumber.net=
/">http://notanumber.net/</a>
</div>
</div>
<p></p>

    </div>
=20=20=20=20=20

=20=20=20=20
    <div style=3D"color:#fff;min-height:0;"></div>


</div>



=20=20






</div>
</div>
</blockquote>
</div>
<br></div>
<p></p>

    </div>
<div class=3D"class">
=20=20=20=20=20

=20=20=20=20
    <div style=3D"color:#fff;min-height:0;"></div>


</div>



=20=20






</div>
</div>
</div>
</blockquote>
</div>
<br><br clear=3D"all"><div><br></div>-- <br>John Meacham - <a href=3D"http:=
//notanumber.net/">http://notanumber.net/</a>
</div>


    </div>
=20=20=20=20=20

=20=20=20=20
    <div style=3D"color: #fff;height: 0;"></div>
</div></div></blockquote></div><br></p>

    </div>
=20=20=20=20=20

    <!--~-|**|PrettyHtmlStart|**|-~-->
    <div style=3D"color: #fff; height: 0;">__._,_.___</div>

=20=20=20=20=20=20=20=20=20=20
=20=20
=20

=20=20=20=20
    <div style=3D"clear:both"> </div>

    <div id=3D"fromDMARC" style=3D"margin-top: 10px;">
        <hr style=3D"height:2px ; border-width:0; color:#E3E3E3; background=
-color:#E3E3E3;">
        Posted by: &quot;John Nilsson&quot; &lt;[email protected]&gt;        =
<hr style=3D"height:2px ; border-width:0; color:#E3E3E3; background-color:#=
E3E3E3;">
     </div>
    <div style=3D"clear:both"> </div>

    <table cellspacing=3D4px style=3D"margin-top: 10px; margin-bottom: 10px=
; color: #2D50FD;">
      <tbody>
        <tr>
          <td style=3D"font-size: 12px; font-family: arial; font-weight: bo=
ld; padding: 7px 5px 5px;"  >
                          <a style=3D"text-decoration: none; color: #2D50FD=
" href=3D"https://groups.yahoo.com/neo/groups/concatenative/conversations/m=
essages/5014;_ylc=3DX3oDMTJwaTIwNjY4BF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3J=
wc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzUwMTQEc2VjA2Z0cgRzbGsDcnBseQRzdGltZQMxNDA3OD=
g4NDM2?act=3Dreply&messageNum=3D5014">Reply via web post</a>
                      </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;" >
            <a href=3D"mailto:[email protected]?subject=3DRe%3A%20%5Bstack%5D=
%20Must%20have%20SINGLE%20input%2FArg%2E" style=3D"text-decoration: none; c=
olor: #2D50FD;">
               Reply to sender            </a>
          </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;">
            <a href=3D"mailto:[email protected]?subject=3DRe%3A=
%20%5Bstack%5D%20Must%20have%20SINGLE%20input%2FArg%2E" style=3D"text-decor=
ation: none; color: #2D50FD">
              Reply to group            </a>
          </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;" >
            <a href=3D"https://groups.yahoo.com/neo/groups/concatenative/co=
nversations/newtopic;_ylc=3DX3oDMTJlNDFkYnRtBF9TAzk3MzU5NzE0BGdycElkAzE4Mzk=
yNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQwNzg4ODQzNg=
--" style=3D"text-decoration: none; color: #2D50FD">Start a New Topic</a>
          </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;color: #2D50FD;" >
                            <a href=3D"https://groups.yahoo.com/neo/groups/=
concatenative/conversations/topics/5008;_ylc=3DX3oDMTM0ZWNtOTVmBF9TAzk3MzU5=
NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzUwMTQEc2VjA2Z0cgR=
zbGsDdnRwYwRzdGltZQMxNDA3ODg4NDM2BHRwY0lkAzUwMDg-" style=3D"text-decoration=
: none; color: #2D50FD;">Messages in this topic</a>
                (7)
                      </td>
        </tr>
      </tbody>
    </table>

=20=20=20=20=20=20=20=20
<div id=3D"megaphoneModule">
            <hr style=3D"height:2px ; border-width:0; color:#E3E3E3; backgr=
ound-color:#E3E3E3;">
        <div>
	     <div class=3D"stream" style=3D"margin-bottom:10px;">
        <div style=3D"background-color:white;">
            <div class=3D"sn-img" style=3D"display:inline;"><img name=3D"tn=
_file" style=3D"padding:0px 10px;vertical-align:top;margin-top:5px;" src=3D=
"http://l.yimg.com/ru/static/images/yg/img/megaphone/1407746726_phpwG3Om0" =
height=3D"82" width=3D"82"></div>
            <div class=3D"mod-txt" style=3D"display:inline-block;">
                <div style=3D"padding-left:6px;font-size:13px;color:gray;">=
Yahoo Groups</div>
                <a rel=3D"nofollow" name=3D"sub_url" target=3D"_blank" href=
=3D"http://yahoogroups.tumblr.com/post/80760303125/discover-attachments-in-=
your-group-conversations" style=3D"color:#0000FF;display:block;margin-left:=
5px;text-decoration:none;"><div style=3D"font-size:15px;">Instantly Explore=
 All Attachments Within Each Group Conversation</div></a>
                <div style=3D"max-width:530px;padding:2px 5px;">You can now=
 explore files, preview and download photos directly within each conversati=
on.</div>
            </div>
        </div>
    </div>        </div>=20=20
=20=20=20=20=20
    <hr style=3D"height:2px ; border-width:0; color:#E3E3E3; background-col=
or:#E3E3E3;">
</div>

<!------- Start Nav Bar ------>




=20

<!-- |**|begin egp html banner|**| -->
<div id=3D"ygrp-vital" style=3D"background-color: #f2f2f2; font-family: Ver=
dana; font-size: 10px; margin-bottom: 10px; padding: 10px;">

    <span id=3D"vithd" style=3D"font-weight: bold; color: #333; text-transf=
orm: uppercase; "><a href=3D"https://groups.yahoo.com/neo/groups/concatenat=
ive/info;_ylc=3DX3oDMTJlbjNzMHNhBF9TAzk3MzU5NzE0BGdycElkAzE4MzkyNzQEZ3Jwc3B=
JZAMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQwNzg4ODQzNg--" style=3D=
"text-decoration: none;">Visit Your Group</a></span>

     <ul style=3D"list-style-type: none; margin: 0; padding: 0; display: in=
line;">
                                                    </ul>
  </div>


<div id=3D"ft" style=3D"font-family: Arial; font-size: 11px; margin-top: 5p=
x; padding: 0 2px 0 0; clear: both;">
  <a href=3D"https://groups.yahoo.com/neo;_ylc=3DX3oDMTJkdDluMHNlBF9TAzk3ND=
c2NTkwBGdycElkAzE4MzkyNzQEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzd=
GltZQMxNDA3ODg4NDM3" style=3D"float: left;"><img src=3D"http://l.yimg.com/r=
u/static/images/yg/img/email/new_logo/logo-groups-137x15.png" height=3D"15"=
 width=3D"137" alt=3D"Yahoo! Groups" style=3D"border: 0;"/></a>
  <div style=3D"color: #747575; float: right;"> &bull; <a href=3D"https://i=
nfo.yahoo.com/privacy/us/yahoo/groups/details.html" style=3D"text-decoratio=
n: none;">Privacy</a> &bull; <a href=3D"mailto:concatenative-unsubscribe@ya=
hoogroups.com?subject=3DUnsubscribe" style=3D"text-decoration: none;">Unsub=
scribe</a> &bull; <a href=3D"https://info.yahoo.com/legal/us/yahoo/utos/ter=
ms/" style=3D"text-decoration: none;">Terms of Use</a> </div>
</div>
<br>

<!-- |**|end egp html banner|**| -->

  </div> <!-- ygrp-msg -->

=20
  <!-- Sponsor -->
  <!-- |**|begin egp html banner|**| -->
  <div id=3D"ygrp-sponsor" style=3D"width:160px; float:right; clear:none; m=
argin:0 0 25px 0; background: #fff;">

<!-- Start Recommendations -->
<div id=3D"ygrp-reco">
     </div>
<!-- End Recommendations -->



  </div>   <!-- |**|end egp html banner|**| -->

  <div style=3D"clear:both; color: #FFF; font-size:1px;">.</div>
</div>

  <img src=3D"http://geo.yahoo.com/serv?s=3D97359714/grpId=3D1839274/grpspI=
d=3D1705006764/msgId=3D5014/stime=3D1407888436" width=3D"1" height=3D"1"> <=
br>

<img src=3D"http://y.analytics.yahoo.com/fpc.pl?ywarid=3D515FB27823A7407E&a=
=3D10001310322279&js=3Dno&resp=3Dimg&cf10=3DFY" width=3D"1" height=3D"1">=20

<div style=3D"color: #fff; height: 0;">__,_._,___</div>
<!--~-|**|PrettyHtmlEnd|**|-~-->

</body>

<!--~-|**|PrettyHtmlStart|**|-~-->
<head>
  <style type=3D"text/css">
  <!--
  #ygrp-mkp {
  border: 1px solid #d8d8d8;
  font-family: Arial;
  margin: 10px 0;
  padding: 0 10px;
}

#ygrp-mkp hr {
  border: 1px solid #d8d8d8;
}

#ygrp-mkp #hd {
  color: #628c2a;
  font-size: 85%;
  font-weight: 700;
  line-height: 122%;
  margin: 10px 0;
}

#ygrp-mkp #ads {
  margin-bottom: 10px;
}

#ygrp-mkp .ad {
  padding: 0 0;
}

#ygrp-mkp .ad p {
  margin: 0;
}

#ygrp-mkp .ad a {
  color: #0000ff;
  text-decoration: none;
}
  #ygrp-sponsor #ygrp-lc {
  font-family: Arial;
}

#ygrp-sponsor #ygrp-lc #hd {
  margin: 10px 0px;
  font-weight: 700;
  font-size: 78%;
  line-height: 122%;
}

#ygrp-sponsor #ygrp-lc .ad {
  margin-bottom: 10px;
  padding: 0 0;
}

  #actions {
    font-family: Verdana;
    font-size: 11px;
    padding: 10px 0;
  }

  #activity {
    background-color: #e0ecee;
    float: left;
    font-family: Verdana;
    font-size: 10px;
    padding: 10px;
  }

  #activity span {
    font-weight: 700;
  }

  #activity span:first-child {
    text-transform: uppercase;
  }

  #activity span a {
    color: #5085b6;
    text-decoration: none;
  }

  #activity span span {
    color: #ff7900;
  }

  #activity span .underline {
    text-decoration: underline;
  }

  .attach {
    clear: both;
    display: table;
    font-family: Arial;
    font-size: 12px;
    padding: 10px 0;
    width: 400px;
  }

  .attach div a {
    text-decoration: none;
  }

  .attach img {
    border: none;
    padding-right: 5px;
  }

  .attach label {
    display: block;
    margin-bottom: 5px;
  }

  .attach label a {
    text-decoration: none;
  }
=20=20
  blockquote {
    margin: 0 0 0 4px;
  }

  .bold {
    font-family: Arial;
    font-size: 13px;
    font-weight: 700;
  }

  .bold a {
    text-decoration: none;
  }

  dd.last p a {
    font-family: Verdana;
    font-weight: 700;
  }

  dd.last p span {
    margin-right: 10px;
    font-family: Verdana;
    font-weight: 700;
  }

  dd.last p span.yshortcuts {
    margin-right: 0;
  }

  div.attach-table div div a {
    text-decoration: none;
  }

  div.attach-table {
    width: 400px;
  }

  div.file-title a, div.file-title a:active, div.file-title a:hover, div.fi=
le-title a:visited {
    text-decoration: none;
  }

  div.photo-title a, div.photo-title a:active, div.photo-title a:hover, div=
.photo-title a:visited {
    text-decoration: none;
  }

  div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts {
    font-family: Verdana;
    font-size: 10px;
    font-weight: normal;
  }

  .green {
    color: #628c2a;
  }

  .MsoNormal {
    margin: 0 0 0 0;
  }

  o {
    font-size: 0;
  }

  #photos div {
    float: left;
    width: 72px;
  }

  #photos div div {
    border: 1px solid #666666;
    height: 62px;
    overflow: hidden;
    width: 62px;
  }

  #photos div label {
    color: #666666;
    font-size: 10px;
    overflow: hidden;
    text-align: center;
    white-space: nowrap;
    width: 64px;
  }

  #reco-category {
    font-size: 77%;
  }

  #reco-desc {
    font-size: 77%;
  }

  .replbq {
    margin: 4px;
  }

  #ygrp-actbar div a:first-child {
   /* border-right: 0px solid #000;*/
    margin-right: 2px;
    padding-right: 5px;
  }

  #ygrp-mlmsg {
    font-size: 13px;
    font-family: Arial, helvetica,clean, sans-serif;
    *font-size: small;
    *font: x-small;
  }

  #ygrp-mlmsg table {
    font-size: inherit;
    font: 100%;
  }

  #ygrp-mlmsg select, input, textarea {
    font: 99% Arial, Helvetica, clean, sans-serif;
  }

  #ygrp-mlmsg pre, code {
    font:115% monospace;
    *font-size:100%;
  }

  #ygrp-mlmsg * {
    line-height: 1.22em;
  }

  #ygrp-mlmsg #logo {
    padding-bottom: 10px;
  }


  #ygrp-msg p a {
    font-family: Verdana;
  }

  #ygrp-msg p#attach-count span {
    color: #1E66AE;
    font-weight: 700;
  }

  #ygrp-reco #reco-head {
    color: #ff7900;
    font-weight: 700;
  }

  #ygrp-reco {
    margin-bottom: 20px;
    padding: 0px;
  }

  #ygrp-sponsor #ov li a {
    font-size: 130%;
    text-decoration: none;
  }

  #ygrp-sponsor #ov li {
    font-size: 77%;
    list-style-type: square;
    padding: 6px 0;
  }=20

  #ygrp-sponsor #ov ul {
    margin: 0;
    padding: 0 0 0 8px;
  }

  #ygrp-text {
    font-family: Georgia;
  }

  #ygrp-text p {
    margin: 0 0 1em 0;
  }

  #ygrp-text tt {
    font-size: 120%;
  }

  #ygrp-vital ul li:last-child {
    border-right: none !important;=20
  }=20
  -->
  </style>
</head>

<!--~-|**|PrettyHtmlEnd|**|-~-->
</html>
<!-- end group email -->


------Nodemailer-0.5.0-?=_1-1407888429979--