Ivan Miljenovic wrote:
On 28 May 2010 15:18, wren ng thornton wrote:
Stefan Monnier wrote:
churchedBool :: t -> t -> t
Important detail: the precise type is "∀t. t → t → t".
encodeBool x = \t e -> if x then t else e
So the type of encodeBool should be:
Bool → ∀t. t → t → t
whereas Haske
Lennart Augustsson wrote:
So what would you consider a proof that there are no total Haskell
functions of that type?
Or, using Curry-Howard, a proof that the corresponding logical formula
is unprovable in intuitionistic logic?
It depends on what kind of proof I'm looking for. If I'm looking fo
I'm looking at a project which involves a GUI where you can insert
components and wire up connections between them. Obviously the
details of what the components are and what code gets executed for
them is domain-specific, however the general idea of graphically
wiring things together is qui
Dan Doel wrote:
On Thursday 27 May 2010 1:49:36 pm wren ng thornton wrote:
Sure, that's another option. But the failure of exhaustive search isn't
a constructive/intuitionistic technique, so not everyone would accept
the proof. Djinn is essentially an implementation of reasoning by
parametricity
On 05/27/10 17:42, Carlos Camarao wrote:
On Thu, May 27, 2010 at 5:43 PM, David Menendez wrote:
On Thu, May 27, 2010 at 10:39 AM, Carlos Camarao
wrote:
Isaac Dupree:
Your proposal appears to allow /incoherent/ instance selection.
This means that an expression can be well-typed in one modul
Hello Bulat,
Friday, May 28, 2010, 9:24:02 AM, you wrote:
>> I have finish all necessary GIO APIs at
>> http://patch-tag.com/r/AndyStewart/gio-branch/home
> but what is the license?
heh, i've found COPYING file. but what you mean? if it's just about
"one should share all improvements to the lib
On 28 May 2010 15:18, wren ng thornton wrote:
> Stefan Monnier wrote:
>>>
>>> churchedBool :: t -> t -> t
>>
>> Important detail: the precise type is "∀t. t → t → t".
>>
>>> encodeBool x = \t e -> if x then t else e
>>
>> So the type of encodeBool should be:
>>
>> Bool → ∀t. t → t → t
>>
>> where
Hello Andy,
Friday, May 28, 2010, 1:05:59 AM, you wrote:
> Looks my file-manager:
> http://farm5.static.flickr.com/4027/4584389024_782b1e09ee_o.png
can you please share windows and linux executables and source code?
> I have finish all necessary GIO APIs at
> http://patch-tag.com/r/AndyStewart/
On Thursday 27 May 2010 9:05:40 pm Ivan Miljenovic wrote:
> On 28 May 2010 09:37, Richard O'Keefe wrote:
> > On May 27, 2010, at 11:50 PM, Yitzchak Gale wrote:
> >> agree100 = (==) `on` for [1..100]
> >
> > Search for "on" and "for" in the Haskell 98 Report and you
> > will not find them. If you
Stefan Monnier wrote:
churchedBool :: t -> t -> t
Important detail: the precise type is "∀t. t → t → t".
encodeBool x = \t e -> if x then t else e
So the type of encodeBool should be:
Bool → ∀t. t → t → t
whereas Haskell will infer it to be
∀t. Bool → t → t → t
Those are the same t
This is an effect with any language that offers a very high degree of
abstraction.
>
>I think this is an example of the "Haskell effect" (more typically
>seen on #haskell), which can be categorised as follows:
>
>1) Someone asks a (usually rather simple) question.
>
>2) People discuss this and pro
On 28 May 2010 14:52, Richard O'Keefe wrote:> Yes,
that kind of thing.
> Remember, this was a BEGINNER-type question.
> If one is giving a *serious* answer, it has to be an answer a
> beginner (who has almost certainly never heard of Traversable)
> can make sense of, and if it uses functions that
On May 28, 2010, at 1:05 PM, Ivan Miljenovic wrote:
On 28 May 2010 09:37, Richard O'Keefe wrote:
On May 27, 2010, at 11:50 PM, Yitzchak Gale wrote:
agree100 = (==) `on` for [1..100]
Search for "on" and "for" in the Haskell 98 Report and you
will not find them. If you want to tell someon
2010/5/27 Günther Schmidt
> Hello C,
>
> thank you for explaining.
>
> The funny thing is that I have never seen anybody take this even a single
> step further than you have in your email.
>
> In particular I have not found anything where someone might use church
> encoding to solve a quite pract
Hi:
Steven S. Skiena of "The Algorithm Design Manual", Second Edition,
2008 has sent me a message that if there is a Haskell page of
algorithms he will link to it.
So, is there such a page and/or is there some collection(s) of
algorithms and data structures some where that I can massage into the
On 16 May 2010 05:13, Henning Thielemann
wrote:
> http://resources.businessobjects.com/labs/cal/gemcutter-techpaper.pdf
Does anyone have the url to the source code?
(I guess businessobjects was acquired by SAP.)
Jens
___
Haskell-Cafe mailing list
Haske
On Thu, May 27, 2010 at 9:11 PM, Stefan Monnier
wrote:
> I.e. to make such an encoding really usable, you need "deep
> polymorphism" (which GHC supports just fine, but which is not part of
> the Haskell standard).
Ah, yes, and thank you for pointing that out. My message involved a
great deal of h
on the topic of llvm,
is anybody using llvm binding on windows ? The official llvm windows
distro does not have a precompiled library which is required for the
llvm bindings ?
jvl
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.has
On Thu, May 27, 2010 at 08:41:02PM -0400, Pierre-Etienne Meunier wrote:
> > If this ever gets to court, we may have a criterion imposed on us,
> > possibly one as silly as the distinction between programs and
> > algorithms said to be made in patent-land.
>
> I really do agree with your post, but
> churchedBool :: t -> t -> t
Important detail: the precise type is "∀t. t → t → t".
> encodeBool x = \t e -> if x then t else e
So the type of encodeBool should be:
Bool → ∀t. t → t → t
whereas Haskell will infer it to be
∀t. Bool → t → t → t
which means that a given object can only be e
On 28 May 2010 09:37, Richard O'Keefe wrote:
>
> On May 27, 2010, at 11:50 PM, Yitzchak Gale wrote:
>>
>> agree100 = (==) `on` for [1..100]
>
> Search for "on" and "for" in the Haskell 98 Report and you
> will not find them. If you want to tell someone to use them,
> you ought to tell them where
> If this ever gets to court, we may have a criterion imposed on us,
> possibly one as silly as the distinction between programs and
> algorithms said to be made in patent-land.
I really do agree with your post, but what I dont get is why Apple does not
intent anything against George Hotz, who p
On Thursday 27 May 2010 7:15:15 pm Brandon S. Allbery KF8NH wrote:
> On May 27, 2010, at 19:07 , Brandon S. Allbery KF8NH wrote:
> > reordered_cons :: (t -> (t1 -> t2)) -> t -> (t1 -> t2)
> > churchedNumeral :: (t -> t ) -> t -> t
> >
> > t unifies with (t1 -> t2), giving us a Church nume
So what would you consider a proof that there are no total Haskell
functions of that type?
Or, using Curry-Howard, a proof that the corresponding logical formula
is unprovable in intuitionistic logic?
As I understand, in general this can only be proven using meta theory
rather than the logic itself
Hi Cafe,
Profiling a function that I thought ultra simple revealed that it consumed more
than half the execution time of my code. After noticing that GHC did not unbox
all I thought it did, I rewrote it with primitive types, and it did a little
better, but not much. Then, examining the core (wi
On May 27, 2010, at 11:50 PM, Yitzchak Gale wrote:
Mujtaba Boori wrote:
I think this answer agree100 f g = map f xs == map g xs where
xs = [1..100] from Richard O'Keefe
is do the job.
agree100 = (==) `on` for [1..100]
Search for "on" and "for" in the Haskell 98 Report and you
will not fin
On Thu, May 27, 2010 at 5:43 PM, David Menendez wrote:
> On Thu, May 27, 2010 at 10:39 AM, Carlos Camarao
> wrote:
> > Isaac Dupree:
> >> Your proposal appears to allow /incoherent/ instance selection.
> >> This means that an expression can be well-typed in one module, and
> >> well-typed in ano
Hey everyone,
I have been thinking about how to generalize the vector package to multiple
dimensions, and I'd like to share my ideas with you all in the hope of having
people smarter than me share their thoughts on how it could be improved ---
*especially* regarding how to make it efficient!
T
> Monstro
I'm going to call it that from now on. Stay out of the IO Monstro.
-deech
On 5/27/10, Mike Dillon wrote:
> begin C. McCann quotation:
>> Personally, I advocate instead using "Sinister" and "Dexter". Nice and
>> catchy, don't you think?
>
> Has anyone done a "translation" of the Prelude
* Ionut G. Stan wrote:
> I was just wondering if there's any particular reason for which the two
> constructors of the Either data type are named Left and Right.
Yes. The basic function on this type is "either".
either a b (Left x) = Left (a x)
either a b (Right x) = Right (b x)
So the names o
I think some of us may be missing the point about language
identification.
It's not a _technical_ question, it's a _legal_ one.
Apple's lawyers have available to them exactly the kind of instrument
they expect (as lawyers) to have: legal testimony. If you sign up to
the
new rules, you are e
Of interest, (.+.) is the T combinator - called (##) in Peter
Thiemann's Wash and the queer bird in Raymond Smullyan's To Mock a
Mockingbird.
Your technique might well relate to the 'element transforming style'
of Wash, see the Modelling HTML in Haskell paper.
Best wishes
Stephen
___
On May 27, 2010, at 13:44 , Günther Schmidt wrote:
The approach is so simple and trivial that it must have occurred to
people a hundred times over. Yet I do not find any other examples of
this. Whenever I google for church encoding the examples don't go
beyond church numerals.
Hm. If I r
On Thu, May 27, 2010 at 10:39 AM, Carlos Camarao
wrote:
> Isaac Dupree:
>> Your proposal appears to allow /incoherent/ instance selection.
>> This means that an expression can be well-typed in one module, and
>> well-typed in another module, but have different semantics in the
>> two modules. For
Hello Andy,
Thursday, May 27, 2010, 5:45:27 PM, you wrote:
does it work both on linux and windows? i'm very interested to run
executables of both kinds and look what features are really supported
(i write file/archive manager and it seems that you have solved many
problems that drive me crazy, su
On May 27, 2010, at 10:53 , Vo Minh Thu wrote:
2010/5/27 Ionut G. Stan :
I was just wondering if there's any particular reason for which the
two
constructors of the Either data type are named Left and Right. I'm
thinking
that something like Success | Failure or Right | Wrong would have
be
Günther Schmidt writes:
> Hi all,
>
> I'm exploring the use of church encodings of algebraic data types in
> Haskell.
> Since it's hard to imagine being the first to do so I wonder if folks
> here could point me to some references on the subject.
>
> I'm looking for examples of church encodings i
On Thursday 27 May 2010 1:49:36 pm wren ng thornton wrote:
> Sure, that's another option. But the failure of exhaustive search isn't
> a constructive/intuitionistic technique, so not everyone would accept
> the proof. Djinn is essentially an implementation of reasoning by
> parametricity, IIRC, so
The approach is so simple and trivial that it must have occurred to
people a hundred times over. Yet I do not find any other examples of
this. Whenever I google for church encoding the examples don't go beyond
church numerals.
Am I googling for the wrong keywords?
You might find "Typing Reco
I'm looking at a project which involves a GUI where you can insert
components and wire up connections between them. Obviously the details
of what the components are and what code gets executed for them is
domain-specific, however the general idea of graphically wiring things
together is quite g
On May 27, 2010, at 19:07 , Brandon S. Allbery KF8NH wrote:
reordered_cons :: (t -> (t1 -> t2)) -> t -> (t1 -> t2)
churchedNumeral :: (t -> t ) -> t -> t
t unifies with (t1 -> t2), giving us a Church numeral made up of
(t1,t2). (I think.)
Which also explains why that record repres
begin C. McCann quotation:
> Personally, I advocate instead using "Sinister" and "Dexter". Nice and
> catchy, don't you think?
Has anyone done a "translation" of the Prelude into Latin?
> modulus PraeLudus ubi
>
> data Uter a b = Sinister a
> | Dexter b
> derivare (Aeq
Hello Daniel,
Friday, May 21, 2010, 11:55:35 PM, you wrote:
> xf = (fromRational $ toRational xd) :: Float
> xf = double2Float xd
> am still surprised how often such kinds of unobvious problems occur
> while programming in Haskell
does it mean that all other languages you are used doesn't have
On May 27, 2010, at 02:46 , Magicloud Magiclouds wrote:
I only have one alex installed under ~/.cabal/bin.
It seems working with shell environment, but not cabal.
But you're doing the Cabal install as root, so it's likely using /
root/.cabal/bin instead of your home directory. Or possibly do
Dan Doel wrote:
On Thursday 27 May 2010 3:27:58 am wren ng thornton wrote:
By parametricty, presumably.
Actually, I imagine the way he proved it was to use djinn, which uses a
complete decision procedure for intuitionistic propositional logic. The proofs
of theorems for that logic correspond
Hello C,
thank you for explaining.
The funny thing is that I have never seen anybody take this even a
single step further than you have in your email.
In particular I have not found anything where someone might use church
encoding to solve a quite practical problem, namely for implementing
wren ng thornton wrote:
David Sankel wrote:
keep :: ((t -> b) -> u -> b) -> ((t1 -> t) -> b) -> (t1 -> u) -> b
Lennart Augustsson wrote:
There are no interesting (i.e. total) functions of that type.
I wonder how one would prove that to be the case. I tried and didn't
come up with anything.
Left-Right also good for representing binary trees.
2010/5/27 C. McCann
> On Thu, May 27, 2010 at 10:25 AM, Ionut G. Stan
> wrote:
> > I was just wondering if there's any particular reason for which the two
> > constructors of the Either data type are named Left and Right. I'm
> thinking
> > th
2010/5/27 Günther Schmidt :
> I'm exploring the use of church encodings of algebraic data types in
> Haskell.
> Since it's hard to imagine being the first to do so I wonder if folks here
> could point me to some references on the subject.
>
> I'm looking for examples of church encodings in Haskell
On Thursday 27 May 2010 3:27:58 am wren ng thornton wrote:
> By parametricty, presumably.
Actually, I imagine the way he proved it was to use djinn, which uses a
complete decision procedure for intuitionistic propositional logic. The proofs
of theorems for that logic correspond to total function
On Thu, May 27, 2010 at 10:25 AM, Ionut G. Stan wrote:
> I was just wondering if there's any particular reason for which the two
> constructors of the Either data type are named Left and Right. I'm thinking
> that something like Success | Failure or Right | Wrong would have been a
> little better.
It's indeed arbitrary. Other common names are Inl and Inr (presumably
standing for "inject left/right"). Some Haskell project do indeed use
a more specific name. The advantage of using the generic Left/Right
is reusability of library code. The particular name of the datatype
and its constructor
On 27 May 2010, at 15:25, Ionut G. Stan wrote:
> Hi,
>
> I was just wondering if there's any particular reason for which the two
> constructors of the Either data type are named Left and Right. I'm thinking
> that something like Success | Failure or Right | Wrong would have been a
> little be
2010/5/27 Ionut G. Stan :
> Hi,
>
> I was just wondering if there's any particular reason for which the two
> constructors of the Either data type are named Left and Right. I'm thinking
> that something like Success | Failure or Right | Wrong would have been a
> little better.
>
> I've recently see
On 05/26/10 15:42, Carlos Camarao wrote:
> I think you are proposing using the current set of instances in
> scope in order to remove ambiguity. Am I right?
I think that an important point is that it is not exactly "to remove
ambiguity", because the proposal tries to solve the problem exactly
wh
Hi all,
I'm exploring the use of church encodings of algebraic data types in
Haskell.
Since it's hard to imagine being the first to do so I wonder if folks
here could point me to some references on the subject.
I'm looking for examples of church encodings in Haskell a little bit
beyond Churc
Hi,
I was just wondering if there's any particular reason for which the two
constructors of the Either data type are named Left and Right. I'm
thinking that something like Success | Failure or Right | Wrong would
have been a little better.
I've recently seen that Scala uses a similar convent
Hi Arie,
If you don't mind binding code.
You can try to use GIO APIs from my repository:
http://patch-tag.com/r/AndyStewart/gio-branch/home
GIO APIs handle unicode filename every well, and cross-platform.
Cheers,
-- Andy
Arie Peterson writes:
> After upgrading to haskell-platform-2010.1.0.
** Advertisement **
Have you tried the library I have written, Data.Rope ?
** End of advertisement **
The algorithmic complexity of most operations on ropes is way better than on
bytestrings : log n for all operations, except traversals, of course.
Cheers,
PE
El 27/05/2010, a las 06:01, Micha
There is a enormous bunch of C code out there on the internet. It is not that
hard to simply take arbitrary commentaries and variable names from it, then
using it to replace GHC's "jjaksh34$"-like variables in the core.
Doing objective-c is a bit harder, as you have to use the objects, or else t
Mujtaba Boori wrote:
> I think this answer agree100 f g = map f xs == map g xs where
> xs = [1..100] from Richard O'Keefe
> is do the job.
agree100 = (==) `on` for [1..100]
Regards,
Yitz
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www
On Thursday 27 May 2010 08:46:04, Magicloud Magiclouds wrote:
> I only have one alex installed under ~/.cabal/bin.
> It seems working with shell environment, but not cabal.
>
My guess:
You added ~/.cabal/bin to the path, but have quoted the path, like
export PATH="~/.cabal/bin:$PATH"
in your .b
As a user, I have too many HTML generators, a few of them with Ajax and none
with server-side event handling (like ASPX or JSPX). Ajax is complicated
but server side event handling is what I really miss because it is simple
from the user point of view, my ervents could be handled in haskell code
On Thu, May 27, 2010 at 10:53 AM, Michael Snoyman wrote:
> In other words, here's what I think the three different benchmarks are
> really doing:
>
> * String: generates a list of Strings, passes each String to a relatively
> inefficient IO routine.
> * ByteString: encodes Strings one by one into
On Thu, May 27, 2010 at 12:57 PM, Johan Tibell wrote:
> On Thu, May 27, 2010 at 10:23 AM, Michael Snoyman wrote:
>
>> On Thu, May 27, 2010 at 11:16 AM, Ivan Miljenovic <
>> ivan.miljeno...@gmail.com> wrote:
>>
>>> Wow, I find it rather surprising that String out-performs Text; any
>>> idea why tha
On Thu, May 27, 2010 at 10:23 AM, Michael Snoyman wrote:
> On Thu, May 27, 2010 at 11:16 AM, Ivan Miljenovic <
> ivan.miljeno...@gmail.com> wrote:
>
>> Wow, I find it rather surprising that String out-performs Text; any
>> idea why that is? I wonder if you're just using it wrong...
>>
>> Could be
On Thu, May 27, 2010 at 10:48 AM, Jasper Van der Jeugt
wrote:
>> How about also providing an enumerator back-end?
>> http://hackage.haskell.org/packages/archive/iteratee/0.3.5/doc/html/Data-Iteratee-Base.html#t%3AEnumeratorGM
>>
>> Then your library can integrate more easily with the snap framewor
Hi all,
I have set up a mailing list for discussion of haskell and LLVM related
topics.
All discussion on using Haskell with LLVM is relevant. That includes
the haskell-llvm bindings on Hackage, custom LLVM bindings and
directly generating LLVM IR code from haskell and passing that
Michael Snoyman writes:
> * If you're standardizing on UTF-8, why not support bytestrings?
+1
> I'm aware that a user could shoot him/herself in the foot by passing
> in non-UTF8 data, but I would imagine the performance gains would outweigh
> this.
Wrap them in a (new)type?
-k
--
If I hav
Hey Bas,
> How about also providing an enumerator back-end?
> http://hackage.haskell.org/packages/archive/iteratee/0.3.5/doc/html/Data-Iteratee-Base.html#t%3AEnumeratorGM
>
> Then your library can integrate more easily with the snap framework:
> http://snapframework.com
Sure, I can do that. But I
On Thu, May 27, 2010 at 11:40 AM, Ivan Miljenovic wrote:
> On 27 May 2010 18:33, Michael Snoyman wrote:
> > I don't do any string concatenation (look closely), I was very careful to
> > avoid it. I tried with lazy text as well: it was slower. This isn't
> > surprising, since lazy text- under the
On 27 May 2010 18:33, Michael Snoyman wrote:
> I don't do any string concatenation (look closely), I was very careful to
> avoid it. I tried with lazy text as well: it was slower. This isn't
> surprising, since lazy text- under the surface- is just a list of strict
> text. And the benchmark itself
Q14: Do you see any problems with respect to integrating BlazeHtml in
your favourite web-framework/server?
How about also providing an enumerator back-end?
http://hackage.haskell.org/packages/archive/iteratee/0.3.5/doc/html/Data-Iteratee-Base.html#t%3AEnumeratorGM
Then your library can integrate
On Thu, May 27, 2010 at 11:28 AM, Ivan Miljenovic wrote:
> On 27 May 2010 18:23, Michael Snoyman wrote:
> >
> >
> > On Thu, May 27, 2010 at 11:16 AM, Ivan Miljenovic
> > wrote:
> >>
> >> On 27 May 2010 17:55, Michael Snoyman wrote:
> >> > Two comments:
> >> > * The exclamation point seems good
On 27 May 2010 18:23, Michael Snoyman wrote:
>
>
> On Thu, May 27, 2010 at 11:16 AM, Ivan Miljenovic
> wrote:
>>
>> On 27 May 2010 17:55, Michael Snoyman wrote:
>> > Two comments:
>> > * The exclamation point seems good enough for attributes. I copied that
>> > for
>> > Hamlet as well.
>> > * If
On Thu, May 27, 2010 at 11:16 AM, Ivan Miljenovic wrote:
> On 27 May 2010 17:55, Michael Snoyman wrote:
> > Two comments:
> > * The exclamation point seems good enough for attributes. I copied that
> for
> > Hamlet as well.
> > * If you're standardizing on UTF-8, why not support bytestrings? I'm
*Pete Chown and Dan Doel. Thank you for your solution. I actually It was not
homework . It was just a a past exam question trying to answer . *
**but your solution is very long , so I don't think he wants answer this
long in the exams. I think this answer agree100 f g = map f xs == map g xs
where x
On 27 May 2010 17:55, Michael Snoyman wrote:
> Two comments:
> * The exclamation point seems good enough for attributes. I copied that for
> Hamlet as well.
> * If you're standardizing on UTF-8, why not support bytestrings? I'm aware
> that a user could shoot him/herself in the foot by passing in
That might be it. However, I linked ~/.cabal/bin/* to
/usr/local/bin And it worked.
On Thu, May 27, 2010 at 3:24 PM, Ivan Miljenovic
wrote:
> On 27 May 2010 16:46, Magicloud Magiclouds
> wrote:
>> I only have one alex installed under ~/.cabal/bin.
>> It seems working with shell environment,
Two comments:
* The exclamation point seems good enough for attributes. I copied that for
Hamlet as well.
* If you're standardizing on UTF-8, why not support bytestrings? I'm aware
that a user could shoot him/herself in the foot by passing in non-UTF8 data,
but I would imagine the performance gai
David Sankel wrote:
keep :: ((t -> b) -> u -> b) -> ((t1 -> t) -> b) -> (t1 -> u) -> b
On Wed, May 26, 2010 at 12:49 PM, Lennart Augustsson
wrote:
There are no interesting (i.e. total) functions of that type.
I wonder how one would prove that to be the case. I tried and didn't come up
wit
On 27 May 2010 16:46, Magicloud Magiclouds
wrote:
> I only have one alex installed under ~/.cabal/bin.
> It seems working with shell environment, but not cabal.
This sounds like a similar problem to one that occurred a couple of months ago.
If you use "~/.cabal/bin/" for your PATH variable, try
Dear all,
BlazeHtml started out on ZuriHac 2010. Now, Jasper Van der Jeugt is
working on it as a student to Google Summer of Code for haskell.org.
His mentors are Simon Meier and Johan Tibell. The goal is to create a
high-performance HTML generation library.
In the past few weeks, we have been ex
I only have one alex installed under ~/.cabal/bin.
It seems working with shell environment, but not cabal.
On Thu, May 27, 2010 at 1:40 PM, Axel Simon wrote:
> Hi Magicloud,
>
> On May 27, 2010, at 4:11, Magicloud Magiclouds wrote:
>
>> Hi, I have met similar problem before, and I do not know wha
writes:
> Or maybe this would be a nice research topic: how to generate C code
> that looks like it’s human written…
Nah, that's too easy: just add a sprinkling of buffer overflows,
undefined behavior, and off-by one index errors.
-k
--
If I haven't seen further, it is by standing in the foo
85 matches
Mail list logo