<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Verdana;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\0027Courier New\0027";
        panose-1:0 0 0 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.apple-tab-span
        {mso-style-name:apple-tab-span;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Verdana","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple" style="word-wrap: break-word;-webkit-nbsp-mode: space;-webkit-line-break: after-white-space">
<div class="WordSection1">
<p class="MsoNormal" style="margin-left:36.0pt">For example the following code fragments read well:<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span style="font-family:&quot;" CourierNew??,?serif??="">then group inits</span><o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span style="font-family:&quot;" CourierNew??,?serif??="">then group permutations</span><o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span style="font-family:&quot;" CourierNew??,?serif??="">then group subsequences</span><o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span style="font-family:&quot;" CourierNew??,?serif??="">then group tails</span><o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#1F497D">Yes... not quite so well with the &#8220;by&#8221; variants.&nbsp; What would we say?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#1F497D">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then group initsBy by x<o:p></o:p></span></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">But following the aforementioned naming convention the
<span style="font-family:&quot;" CourierNew??,?serif??="">groupWith</span> function could as well be named as&nbsp;<span style="font-family:&quot;" CourierNew??,?serif??="">equals</span>. Now this reads well:<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span style="color:#1F497D">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span style="font-family:&quot;" CourierNew??,?serif??="">then group equals by e</span><o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt"><span style="font-size:11.0pt;font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#1F497D">Good idea.&nbsp; But &#8220;equals&#8221; is a terribly over-used word; I think using it would cause confusion.&nbsp; How about &#8220;equalities&#8221;, or &#8220;equivalents&#8221; :: [a] -&gt; [[a]]<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#1F497D">I don&#8217;t think we can steal &#8220;group&#8221; as a keyword -- it&#8217;s a function exported by Data.List, and I don&#8217;t think the benefit justifies the cost.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#1F497D">Simon<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Verdana&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;"> George Giorgidze [mailto:giorgidze@gmail.com]
<br>
<b>Sent:</b> 10 October 2011 23:22<br>
<b>To:</b> Simon Peyton-Jones; GHC Users List; Philip Wadler<br>
<b>Subject:</b> Re: Two Proposals<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<p class="MsoNormal">A quick thought that came to me after hoogling [a] -&gt; [[a]].<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">The first four functions in the search result are named after what they return (noun in plural) rather than what they do (verb). I am talking about
<span style="font-family:&quot;" CourierNew??,?serif??="">inits</span>, <span style="font-family:&quot;" CourierNew??,?serif??="">
permutations</span>, <span style="font-family:&quot;" CourierNew??,?serif??="">subsequence</span> and
<span style="font-family:&quot;" CourierNew??,?serif??="">tails</span>.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">So I thought the following syntax might work as well if (as it is already common) grouping functions are named after &nbsp;what they return.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:&quot;" CourierNew??,?serif??="">then &nbsp; &nbsp; &nbsp; f<br>
then &nbsp; &nbsp; &nbsp; f by e<br>
then group f<br>
then group f by e</span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">For example the following code fragments read well:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:&quot;" CourierNew??,?serif??="">then group inits</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:&quot;" CourierNew??,?serif??="">then group permutations</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:&quot;" CourierNew??,?serif??="">then group subsequences</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:&quot;" CourierNew??,?serif??="">then group tails</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">Here we use the special identifier group as a verb.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">I have not told you about the fifth result of the hoogling, the
<span style="font-family:&quot;" CourierNew??,?serif??="">groupWith</span> function. The following really looks ugly:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:&quot;" CourierNew??,?serif??="">then group groupWith by e</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">But following the aforementioned naming convention the <span style="font-family:&quot;" CourierNew??,?serif??="">
groupWith</span> function could as well be named as&nbsp;<span style="font-family:&quot;" CourierNew??,?serif??="">equals</span>. Now this reads well:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#1F497D">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:&quot;" CourierNew??,?serif??="">then group equals by e</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">Cheers, George<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<div>
<p class="MsoNormal">On 2011-Oct-5, at 09:14 , Simon Peyton-Jones wrote:<o:p></o:p></p>
</div>
<p class="MsoNormal"><br>
<br>
<o:p></o:p></p>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">[adding ghc-users]<br>
<br>
It's not easy, Phil. &nbsp;Do you have any ideas?<br>
<br>
For the 'then' case the name of the function serves as the verb. &nbsp;One might say<br>
<br>
<span class="apple-tab-span">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>then take 4<br>
or<br>
<span class="apple-tab-span">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>then takeWhile by salary &gt; 40<br>
<br>
For grouping one might like to say the same &nbsp;thing, such as<br>
<span class="apple-tab-span">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>then groupBy by salary<br>
but the typing rule is quite different, so we really need a different keyword. &nbsp;We chose the compound keyword &quot;then group&quot; to avoid needing a whole new keyword (&quot;group&quot; is treated specially only in tthis context). So you write<br>
<span class="apple-tab-span">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>then group by salary using groupBy<br>
<br>
Using this order of the pieces for the sorting case is harder. What would one say? &nbsp;&quot;then process&quot;? &nbsp;Like this?<br>
<span class="apple-tab-span">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>then process by salary &gt; 40 using takeWhile<br>
Not very nice.<br>
<br>
One could use a new keyword for grouping &quot;theng&quot; say, thus:<br>
<span class="apple-tab-span">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>theng groupBy by salary<br>
But that is hardly beautiful either.<br>
<br>
So the current story is not great, but it's the best I could think of. Improvements welcome.<br>
<br>
Simon<br>
<br>
| &nbsp;-----Original Message-----<br>
| &nbsp;From: Philip Wadler [mailto:wadler@inf.ed.ac.uk]<br>
| &nbsp;Sent: 04 October 2011 18:15<br>
| &nbsp;To: Simon Peyton-Jones; George Giorgidze<br>
| &nbsp;Subject: Re: FW: Two Proposals<br>
| &nbsp;<br>
| &nbsp;George,<br>
| &nbsp;<br>
| &nbsp;Nice proposal. &nbsp;I like the idea of symmetry, but don't at all like the<br>
| &nbsp;idea that f comes before e for 'then' but f comes after e for 'then<br>
| &nbsp;group'. &nbsp;Can you rethink it and come up with something even more<br>
| &nbsp;symmetric?<br>
| &nbsp;<br>
| &nbsp;Yours, &nbsp;-- P<br>
| &nbsp;<br>
| &nbsp;<br>
| &nbsp;On Tue, Oct 4, 2011 at 9:23 AM, Simon Peyton-Jones<br>
| &nbsp;&lt;<a href="mailto:simonpj@microsoft.com">simonpj@microsoft.com</a>&gt; wrote:<br>
| &nbsp;&gt; FYI<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; -----Original Message-----<br>
| &nbsp;&gt; From: <a href="mailto:glasgow-haskell-users-bounces@haskell.org">glasgow-haskell-users-bounces@haskell.org</a> [mailto:glasgow-haskell-<br>
| &nbsp;users-bounces@haskell.org] On Behalf Of George Giorgidze<br>
| &nbsp;&gt; Sent: 30 September 2011 18:28<br>
| &nbsp;&gt; To: <a href="mailto:glasgow-haskell-users@haskell.org">glasgow-haskell-users@haskell.org</a><br>
| &nbsp;&gt; Subject: Two Proposals<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; GHC Users,<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; I would like to make to the following two proposals:<br>
| &nbsp;&gt; &nbsp;* Eliminate the default grouping close from SQL-like comprehensions<br>
| &nbsp;&gt; &nbsp;* Introduce a GHC extension for list literal overloading<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; OK, let me start with the first proposal.<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; Currently, the SQL-like comprehension notation (both in its list comprehension<br>
| &nbsp;and monad comprehension variants) features the following five clauses:<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; then f<br>
| &nbsp;&gt; then f by e<br>
| &nbsp;&gt; then group by e<br>
| &nbsp;&gt; then group using f<br>
| &nbsp;&gt; then group by e using f<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; The first two clauses are used for specifying transformations of type [a] -&gt; [a]<br>
| &nbsp;(or Monad m =&gt; m a-&gt; m a for monad comprehensions). The following three<br>
| &nbsp;clauses are used for specifying transformations of type [a] -&gt; [[a]] (or Monad m,<br>
| &nbsp;Functor f =&gt; m a -&gt; m (f a) for monad comprehensions). See [1] for further<br>
| &nbsp;details.<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; Note that the third clause does not mention which function is used for grouping.<br>
| &nbsp;In this case GHC.Exts.groupWith function is used as a default for list<br>
| &nbsp;comprehensions and the mgroupWith function from the MonadGroup class is used<br>
| &nbsp;as a default for monad comprehensions.<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; I would like to suggest to remove the third clause for the following reasons:<br>
| &nbsp;&gt; * Currently the syntax is asymmetrical. Note that there is the default case for<br>
| &nbsp;the 'then group' clause and not for the 'then' clause.<br>
| &nbsp;&gt; * In the current notation it is not clear which grouping function is used in the<br>
| &nbsp;default case<br>
| &nbsp;&gt; * For many monads including lists it is not clear which function should be<br>
| &nbsp;selected as a default (e.g., the groupWith function also does sorting and it is not<br>
| &nbsp;clear to me why this should be the default)<br>
| &nbsp;&gt; * Gets rid of the MonadGroup class. Currently the sole purpose of this class is to<br>
| &nbsp;introduce a default grouping function for monad comprehensions.<br>
| &nbsp;&gt; * Explicit mention of the grouping function would make &nbsp;monad/list<br>
| &nbsp;comprehensions much easier to read by making it immediately apparent which<br>
| &nbsp;function is used for grouping.<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; My second proposal is to introduce the OverloadedLists extension that overloads<br>
| &nbsp;list literals. See Section 5.2 in [1] for details.<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; Basically the idea is to treat list literals like:<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; [1,2,3]<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; as<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; fromList [1,2,3]<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; where<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; class IsList l where<br>
| &nbsp;&gt; &nbsp;type Item l<br>
| &nbsp;&gt; &nbsp;fromList :: [Item l] -&gt; l<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; In the following I give useful instances of the IsList class.<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; instance IsList [a] where<br>
| &nbsp;&gt; &nbsp;type Item [a] = a<br>
| &nbsp;&gt; &nbsp;fromList = id<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; instance (Ord a) =&gt; IsList (Set a) where<br>
| &nbsp;&gt; &nbsp;type Item (Set a) = a<br>
| &nbsp;&gt; &nbsp;fromList = Set.fromList<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; instance (Ord k) =&gt; IsList (Map k v) where<br>
| &nbsp;&gt; &nbsp;type Item (Map k v) = (k,v)<br>
| &nbsp;&gt; &nbsp;fromList = Map.fromList<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; instance IsList (IntMap v) where<br>
| &nbsp;&gt; &nbsp;type Item (IntMap v) = (Int,v)<br>
| &nbsp;&gt; &nbsp;fromList = IntMap.fromList<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; instance IsList Text where<br>
| &nbsp;&gt; &nbsp;type Item Text = Char<br>
| &nbsp;&gt; &nbsp;fromList = Text.pack<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; As you can see the extension would allow list literals to be used for sets, maps<br>
| &nbsp;and integer maps. In addition the suggested OverloadedLists extension would<br>
| &nbsp;subsume OverloadedStrings extension (see the instance for Text, for example).<br>
| &nbsp;Having said that, for now, I am not suggesting to remove the OverloadedStrings<br>
| &nbsp;extension as it appears to be widely used.<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; This extension could also be used for giving data-parallel array literals instead of<br>
| &nbsp;the special syntax used currently.<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; Unless there is a vocal opposition to the aforementioned two proposals, I would<br>
| &nbsp;like to implement them in GHC. Both changes appear to be straightforward to<br>
| &nbsp;implement.<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; Thanks in advance for your feedback.<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; Cheers, George<br>
| &nbsp;&gt;<br>
| &nbsp;&gt; [1] <a href="http://www-db.informatik.uni-tuebingen.de/files/giorgidze/haskell2011.pdf">
http://www-db.informatik.uni-tuebingen.de/files/giorgidze/haskell2011.pdf</a><br>
| &nbsp;&gt; _______________________________________________<br>
| &nbsp;&gt; Glasgow-haskell-users mailing list<br>
| &nbsp;&gt; <a href="mailto:Glasgow-haskell-users@haskell.org">Glasgow-haskell-users@haskell.org</a><br>
| &nbsp;&gt; <a href="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users">http://www.haskell.org/mailman/listinfo/glasgow-haskell-users</a><br>
| &nbsp;&gt;<br>
| &nbsp;&gt;<br>
| &nbsp;&gt;<br>
| &nbsp;<br>
| &nbsp;<br>
| &nbsp;<br>
| &nbsp;--<br>
| &nbsp;.\ Philip Wadler, Professor of Theoretical Computer Science<br>
| &nbsp;./\ School of Informatics, University of Edinburgh<br>
| &nbsp;/&nbsp; \ <a href="http://homepages.inf.ed.ac.uk/wadler/">http://homepages.inf.ed.ac.uk/wadler/</a><br>
| &nbsp;<br>
| &nbsp;The University of Edinburgh is a charitable body, registered in<br>
| &nbsp;Scotland, with registration number SC005336.<br>
| &nbsp;<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<p class="MsoNormal" style="margin-left:4.8pt"><o:p>&nbsp;</o:p></p>
</div>
</body>
</html>