Send Beginners mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://www.haskell.org/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."
Today's Topics:
1. Re: Problem with catching error (Alexey G)
2. Re: A question on types (Mike Meyer)
3. Re: A question on types (C K Kashyap)
4. Re: Network client - reading and writing to a socket
(Manfred Lotz)
5. Suggestions for creating a "bind" function that can be
applied to different things? (Costello, Roger L.)
6. Re: Suggestions for creating a "bind" function that can be
applied to different things? (Antoine Latter)
7. Re: Network client - reading and writing to a socket
(Chadda? Fouch?)
8. linker error, protips welcome (Michael Litchard)
----------------------------------------------------------------------
Message: 1
Date: Mon, 1 Aug 2011 16:29:16 +0300
From: Alexey G <[email protected]>
Subject: Re: [Haskell-beginners] Problem with catching error
To: Daniel Fischer <[email protected]>
Cc: [email protected]
Message-ID:
<caordkxtbknlt6gd0ounm1fbjsgod_yoo67rb+_r+gkzsx-s...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
Thank you for help. I didn't know about the "reads" function.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20110801/7e29a5cd/attachment-0001.htm>
------------------------------
Message: 2
Date: Mon, 1 Aug 2011 09:17:44 -0700
From: Mike Meyer <[email protected]>
Subject: Re: [Haskell-beginners] A question on types
To: C K Kashyap <[email protected]>
Cc: beginners <[email protected]>
Message-ID:
<CAD=7U2B=bcdngptm8h8-x3wxxxjoxgpclbtzg1+fjgzjsrm...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
On Mon, Aug 1, 2011 at 12:52 AM, C K Kashyap <[email protected]> wrote:
> Hi,
> To clarify my understanding, I created this table
>
> | | weak | strong |
> |---------+------+---------|
> | dynamic | perl | Ruby |
> | static | C | Haskell |
> |---------+------+---------|
>
> Could someone please ratify this?
>
Static vs. dynamic typing is pretty well always understood to mean compile
time vs. run time type checking, so you've got that one.
On the other hand, there's no widely accepted definition of strong vs. weak
typing. So I'm pretty sure there's at least one definition for which you're
right. Both C and Ruby fit definitions for both strong and weak typing, and
there are probably definitions that have them swap places. Perl and Haskell
may always be considered weakly and strongly typed (respectively), but I
wouldn't bet on it.
<mike
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20110801/d64e7169/attachment-0001.htm>
------------------------------
Message: 3
Date: Mon, 1 Aug 2011 22:22:57 +0530
From: C K Kashyap <[email protected]>
Subject: Re: [Haskell-beginners] A question on types
To: Mike Meyer <[email protected]>
Cc: beginners <[email protected]>
Message-ID:
<CAGdT1grDLmA0XeFCtev8EprhKRQ8zGBD=6ky+vr4vcutjp_...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
Thank you folks...
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20110801/c87a386d/attachment-0001.htm>
------------------------------
Message: 4
Date: Mon, 1 Aug 2011 21:16:46 +0200
From: Manfred Lotz <[email protected]>
Subject: Re: [Haskell-beginners] Network client - reading and writing
to a socket
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=US-ASCII
On Sun, 31 Jul 2011 15:14:23 -0400
Patrick LeBoutillier <[email protected]> wrote:
> Manfred,
>
> > The problem is that the message itself is some 30K big and I only
> > get some 16K of the message.
> >
> > How could I force to get the whole message?
>
> My guess is that you can't. This call:
>
> c' <- B.hGetNonBlocking h 40000
>
> tries to read as much as it can (up to 40000 bytes) but it won't block
> to wait for data. Perhaps the rest of your message is in a different
> TCP packet or delayed or whatever, but I think you have to keep on
> reading (and maybe block) until you know you have read the entire
> message. The IMAP specs will tell you how to identify the "end of the
> message".
>
> BTW: This issue is not Haskell specific. If you implement the same
> code in C, Perl or Java you will have to deal with the same problem.
> When you read from a socket, there is no general way of knowing that
> the other side has sent everything.
>
Hmm. I'm not quite sure you are fully right. On the one hand I believe
that this could be an issue which arises in python/perl etc. as well.
On the other hand I believe it should be possible to receive from a
socket what is available at a certain point of time.
I found this link http://sequence.complete.org/node/257, and when I run
the code I get the full message from the imap server even if the
message is a couple of megabytes big.
I have to figure out how to use the code for my need as I do not get
the input from the keyboard. As a haskell beginner things like this are
not always trivial.
--
Thanks,
Manfred
>
> Patrick
>
> >
> > --
> > Manfred
> >
> >
> >
> > _______________________________________________
> > Beginners mailing list
> > [email protected]
> > http://www.haskell.org/mailman/listinfo/beginners
> >
>
>
>
--
Manfred
------------------------------
Message: 5
Date: Mon, 1 Aug 2011 19:44:38 -0400
From: "Costello, Roger L." <[email protected]>
Subject: [Haskell-beginners] Suggestions for creating a "bind"
function that can be applied to different things?
To: "[email protected]" <[email protected]>
Message-ID:
<[email protected]>
Content-Type: text/plain; charset="us-ascii"
Hi Folks,
When I say:
"Let x be of datatype Int."
I think the proper terminology is "bind". That is, I bind the name "x" to the
Int datatype.
Is that the correct terminology?
Assuming it is, I would like to bind a name to many different things. I seek
your suggestions on how to do this.
First let dt1, dt2, dt3, dt4 be "DataTypes":
dt1, dt2, dt3, dt4 :: DataType
And let "Name" be synonymous with String:
type Name = String
And let title, author, date, cost be "Elements":
title, author, date, cost, book :: Element
I would like a "bind" function that binds a Name to a DataType to create an
Element:
bind :: Name -> DataType -> Element
Here are a few examples of using bind to create Elements:
title = bind "Title" dt4
author = bind "Author" dt4
date = bind "Date" dt4
I would also like to bind a Name to a DataType to create an "Attribute":
bind :: Name -> DataType -> Attribute
Here's an example of using bind to create an Attribute:
currency = bind "Currency" dt3
And I'd like to bind an Attribute to an Element:
bind :: Attribute -> Element -> Element
Here's an example of binding the currency Attribute to a cost Element:
cost = bind currency (bind "Cost" dt1)
Finally, I'd like to create an Element by binding a Name to a list of Elements:
bind :: Name -> [Element] -> Element
Here's an example of this:
book = bind "Book" [title, author, date, cost]
As you see, I'd like to "bind" to lots of different things.
But I can't create multiple functions with the same name, "bind".
And I'd rather not create a function for each thing that I want to bind to,
e.g., elementBind, attributeBind, attributeToElementBind, multipleElementsBind.
There must be an elegant solution.
What is your suggestion?
/Roger
------------------------------
Message: 6
Date: Mon, 1 Aug 2011 19:27:14 -0500
From: Antoine Latter <[email protected]>
Subject: Re: [Haskell-beginners] Suggestions for creating a "bind"
function that can be applied to different things?
To: "Costello, Roger L." <[email protected]>
Cc: "[email protected]" <[email protected]>
Message-ID:
<cakjsnqgpgbrwcnzrk6bzrejmjtezos1arn7qfrqmyvbnx19...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8
On Mon, Aug 1, 2011 at 6:44 PM, Costello, Roger L. <[email protected]> wrote:
> Hi Folks,
>
> When I say:
>
> ? ?"Let x be of datatype Int."
>
> ?I think the proper terminology is "bind". That is, I bind the name "x" to
> the Int datatype.
>
> Is that the correct terminology?
>
When someone uses the terminology "bind" I assume that they are
referring to binding a value to a name, not associating a typing rule
with the name.
So in the haskell declaration:
> let f x = show x
I would use the word "binding" to refer to the introduction of the
variable named "x" as used in the body of the function "f".
That might be an over-limited view of the concept, and really this
only applies to to the study of the structure of programming languages
themselves - I feel like you might be talking about something
different.
I don't quite understanding what you're after in the rest of the post.
Are you implementing a compiler? Some sort of abstract analysis work?
What is your "DataType" type meant to represent? What is your
"Element" type meant to represent?
Antoine
------------------------------
Message: 7
Date: Tue, 2 Aug 2011 02:59:44 +0200
From: Chadda? Fouch? <[email protected]>
Subject: Re: [Haskell-beginners] Network client - reading and writing
to a socket
To: Manfred Lotz <[email protected]>
Cc: [email protected]
Message-ID:
<canfjzrzkcegct-xuywta7spc5f558nyumhze8mv4cxubsxq...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8
On Mon, Aug 1, 2011 at 9:16 PM, Manfred Lotz <[email protected]> wrote:
> On Sun, 31 Jul 2011 15:14:23 -0400
> Patrick LeBoutillier <[email protected]> wrote:
>
>> Manfred,
>>
>> > The problem is that the message itself is some 30K big and I only
>> > get some 16K of the message.
>> >
>> > How could I force to get the whole message?
>>
>> My guess is that you can't. This call:
>>
>> c' <- B.hGetNonBlocking h 40000
>>
>> tries to read as much as it can (up to 40000 bytes) but it won't block
>> to wait for data. Perhaps the rest of your message is in a different
>> TCP packet or delayed or whatever, but I think you have to keep on
>> reading (and maybe block) until you know you have read the entire
>> message. The IMAP specs will tell you how to identify the "end of the
>> message".
>>
>> BTW: This issue is not Haskell specific. If you implement the same
>> code in C, Perl or Java you will have to deal with the same problem.
>> When you read from a socket, there is no general way of knowing that
>> the other side has sent everything.
>>
>
> Hmm. I'm not quite sure you are fully right. On the one hand I believe
> that this could be an issue which arises in python/perl etc. as well.
> On the other hand I believe it should be possible to receive from a
> socket what is available at a certain point of time.
Yes and that's exactly what you have done : your hGetLine blocks until
there is something to read on the socket and then your hGetNonBlocking
gets *everything* there is to read on this socket at this exact
moment... Except as had been said by others that your message has been
split into several packets and they're not all there when you hGet.
What you want is not "what is available at a certain point of time",
you want to read a whole message, except that this "message" notion is
only in your head (and in a specific protocol, IMAP here) it has no
direct relevance to how things happens on the network.
> I found this link http://sequence.complete.org/node/257, and when I run
> the code I get the full message from the imap server even if the
> message is a couple of megabytes big.
Of course you get the whole message ! This code try to read (with
blocking calls) forever what's on your socket, it reads it, send it on
a TChan and then retry reading it, bit by bit it gets your whole
message, of course it has no idea that it got your whole message and
if nothing is done it will continue to wait on your socket for all
eternity...
The key point is this function :
> listenLoop :: IO a -> TChan a -> IO ()
> listenLoop act chan =
> sequence_ (repeat (act >>= atomically . writeTChan chan))
This does not stop short of an exception. Two of those loops are
started each in their own thread (so that they don't block the rest of
the program) to read stdin and a socket respectively.
> I have to figure out how to use the code for my need as I do not get
> the input from the keyboard.
This code is probably not doing what you want, this is a toy example
where most of the complexity comes from handling two source of input
simultaneously and collating their answer on the same TChan. Its main
problem is that it don't even try to read messages, it just read
everything and doesn't know when it's finished. You need to listen to
David's advice and read a bit on the protocol you're trying to handle
and how it encode the notion of message, how it signals that the
message has ended.
--
Jeda?
------------------------------
Message: 8
Date: Mon, 1 Aug 2011 20:36:58 -0700
From: Michael Litchard <[email protected]>
Subject: [Haskell-beginners] linker error, protips welcome
To: [email protected]
Message-ID:
<CAEzeKYq56akZ8bTmVguvGkZk5oOiJ=b683FLjLOq=rpn4vm...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
ghci is trying to load both
network-2.3.0.2
and
network-2.3.0.4
I don't have 2.3.02 installed
I checked package.conf, and it's not there. What can I check to see
what's going on?
hcifoo> :main
Loading package bytestring-0.9.1.10 ... linking ... done.
Loading package transformers-0.2.2.0 ... linking ... done.
Loading package mtl-2.0.1.0 ... linking ... done.
Loading package parsec-3.1.1 ... linking ... done.
Loading package unix-2.4.2.0 ... linking ... done.
Loading package network-2.3.0.2 ... linking ... done.
Loading package array-0.3.0.2 ... linking ... done.
Loading package old-locale-1.0.0.2 ... linking ... done.
Loading package old-time-1.0.0.6 ... linking ... done.
Loading package HTTP-4000.1.1 ... linking ... done.
Loading package containers-0.4.0.0 ... linking ... done.
Loading package deepseq-1.1.0.2 ... linking ... done.
Loading package text-0.11.0.6 ... linking ... done.
Loading package curl-1.3.7 ... linking ... done.
Loading package HUnit-1.2.2.3 ... linking ... done.
Loading package filepath-1.2.0.0 ... linking ... done.
Loading package directory-1.1.0.0 ... linking ... done.
Loading package process-1.0.1.5 ... linking ... done.
Loading package time-1.2.0.3 ... linking ... done.
Loading package random-1.0.0.3 ... linking ... done.
Loading package haskell98-1.1.0.1 ... linking ... done.
Loading package network-2.3.0.4 ...
GHCi runtime linker: fatal error: I found a duplicate definition for symbol
my_inet_ntoa
whilst processing object file
/home/mlitchard/.cabal/lib/network-2.3.0.4/ghc-7.0.3/HSnetwork-2.3.0.4.o
This could be caused by:
* Loading two different object files which export the same symbol
* Specifying the same object file twice on the GHCi command line
* An incorrect `package.conf' entry, causing some object to be
loaded twice.
GHCi cannot safely continue in this situation. Exiting now. Sorry.
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 38, Issue 3
****************************************