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: forall confusion (Brandon S. Allbery KF8NH)
2. Re: forall confusion (Isaac Dupree)
3. Re: forall confusion (Heinrich Apfelmus)
4. Arrow (Luca Ciciriello)
5. Re: Arrow (Brent Yorgey)
6. Re: Arrow (Luca Ciciriello)
----------------------------------------------------------------------
Message: 1
Date: Sat, 29 May 2010 14:43:39 -0400
From: "Brandon S. Allbery KF8NH" <[email protected]>
Subject: Re: [Haskell-beginners] forall confusion
To: [email protected]
Cc: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset="us-ascii"
On May 29, 2010, at 11:35 , Philip Scott wrote:
> Hi all,
>
> I was wondering if someone could give me an intuitive explanation of
> why in
>
> f :: forall a.(Show a) => a -> String
> f x = show x
>
> "forall a.(Show a) => a" appears to translate into "Any a, as long
> as it is an instance of Show"
>
> but if I use forall in an type qualifier in an assignment:
>
> myList = [] :: [forall a.(Show a) => a]
>
> "forall a.(Show a) => a" seems to mean "Any a, as long as it is
> bottom"
Using the WikiBook's DataBox type as an example:
In the case of [DataBox], I can build list elements with SB (a valid
value for a [Databox] is [SB 1]); what name do I use in place of SB
for the anonymous forall-ed type in myList? Since I don't have such a
name, the only possible value I can use is the one value that exists
in every type: bottom.
Other examples:
f :: forall a. (Show a) => a -> String -- your example above
versus
undefined :: forall a. a -- from the Haskell Prelude
This highlights a corner case: "f" gives you a "nickname" to use,
namely the fact that the forall-ed type is an argument. "undefined"
doesn't give you any handle at all, so its only possible value is
bottom.
data ST s a
runST :: (forall s. ST s a) -> a
runST gives you a temporary name for "a", in the form of the returned
value. You don't have a name for the "s", though, as it's hidden
inside the ST type, which doesn't have any constructors. This is used
to hide information: the invocation "runST myFunc initialValue"
invokes myFunc, passing it initialValue and a special container whose
contents are private (the "s"). myFunc can put things into and take
things out of the container, using the functions in Control.Monad.ST,
and having taken a value out it can pass that value to something else
--- but nothing outside of the definition of myFunc can get at the
container. This is mainly useful when you need to hide an impure
manipulation of values: you can do destructive updates of things
inside the container, as long as any given input to myFunc always
produces the same output (referential transparency: it should always
be possible to replace a function call with its result, meaning it
can't depend on external state other than its parameters). A fast
array library can use runST to perform a destructive-update algorithm
when it's faster than the equivalent pure algorithm, provided both
algorithms always produce the same results for the same inputs.
--
brandon s. allbery [solaris,freebsd,perl,pugs,haskell] [email protected]
system administrator [openafs,heimdal,too many hats] [email protected]
electrical and computer engineering, carnegie mellon university KF8NH
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 195 bytes
Desc: This is a digitally signed message part
Url :
http://www.haskell.org/pipermail/beginners/attachments/20100529/3d87e212/PGP-0001.bin
------------------------------
Message: 2
Date: Sat, 29 May 2010 16:30:25 -0400
From: Isaac Dupree <[email protected]>
Subject: Re: [Haskell-beginners] forall confusion
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
On 05/29/10 11:35, Philip Scott wrote:
> Hi all,
>
> I was wondering if someone could give me an intuitive explanation of why in
>
> f :: forall a.(Show a) => a -> String
> f x = show x
>
> "forall a.(Show a) => a" appears to translate into "Any a, as long as it
> is an instance of Show"
The function must be type-correctly defined for "any a in Show". (the
caller/user "chooses" which type "a" is desired.)
> but if I use forall in an type qualifier in an assignment:
>
> myList = [] :: [forall a.(Show a) => a]
Each element of this list must be "any a in Show". (the caller/user
"chooses" which type "a" is desired.) In this case, the only way to
generate a value that is truly "any a in Show" is "undefined".*
*some classes, like Read, might provide another possible value, as in
[read "123"] which could be [forall a.(Read a) => a] -- albeit only a
few types "a", such as Integer and Double, would actually have
non-bottom values in this case, but it's easy to construct less-awful
examples.
Why were you poring over Existentially Quantified Types? -- you didn't
use any existentials above -- did you want to? (or I should ask -- can
you tell, yet, whether you wanted to?)
-Isaac
------------------------------
Message: 3
Date: Sun, 30 May 2010 09:53:44 +0200
From: Heinrich Apfelmus <[email protected]>
Subject: [Haskell-beginners] Re: forall confusion
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8
Philip Scott wrote:
> I've been poring over
>
> http://en.wikibooks.org/wiki/Haskell/Existentially_quantified_types
>
> for the last hour and I feel like my eyes are starting to melt.
http://en.wikibooks.org/wiki/Haskell/Polymorphism
is also relevant.
Regards,
Heinrich Apfelmus
--
http://apfelmus.nfshost.com
------------------------------
Message: 4
Date: Sun, 30 May 2010 16:14:27 +0200
From: Luca Ciciriello <[email protected]>
Subject: [Haskell-beginners] Arrow
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=us-ascii
Hi All.
As a mathematician I've studied the Arrows calculus as extension of the lambda
calculus. Now I've found in the Haskell programming language that there is a
library named Control.Arrow. I've read on Haskell wiki that Control.Arrow is
a generalization of monads. So, is that library related in same way with the
Arrows calculus?
Thanks in advance for any answer.
Luca.
------------------------------
Message: 5
Date: Sun, 30 May 2010 10:41:56 -0400
From: Brent Yorgey <[email protected]>
Subject: Re: [Haskell-beginners] Arrow
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=us-ascii
What do you mean by the Arrows calculus? Can you give a link? If you
mean Lindley, Wadler, and Yallop's work, then yes, that is directly
related to Control.Arrow. If you mean some other formalism with the
same name, then I'm not sure.
-Brent
On Sun, May 30, 2010 at 04:14:27PM +0200, Luca Ciciriello wrote:
> Hi All.
> As a mathematician I've studied the Arrows calculus as extension of the
> lambda calculus. Now I've found in the Haskell programming language that
> there is a library named Control.Arrow. I've read on Haskell wiki that
> Control.Arrow is a generalization of monads. So, is that library related in
> same way with the Arrows calculus?
>
> Thanks in advance for any answer.
>
> Luca._______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
------------------------------
Message: 6
Date: Sun, 30 May 2010 16:53:46 +0200
From: Luca Ciciriello <[email protected]>
Subject: Re: [Haskell-beginners] Arrow
To: Brent Yorgey <[email protected]>
Cc: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=us-ascii
Yes, I read the article "The arrow calculus" in the Journal of Functional
Programming in January.
http://journals.cambridge.org/action/displayIssue?jid=JFP&volumeId=20&seriesId=0&issueId=01
Thanks for your answer.
Luca.
On May 30, 2010, at 4:41 PM, Brent Yorgey wrote:
> What do you mean by the Arrows calculus? Can you give a link? If you
> mean Lindley, Wadler, and Yallop's work, then yes, that is directly
> related to Control.Arrow. If you mean some other formalism with the
> same name, then I'm not sure.
>
> -Brent
>
> On Sun, May 30, 2010 at 04:14:27PM +0200, Luca Ciciriello wrote:
>> Hi All.
>> As a mathematician I've studied the Arrows calculus as extension of the
>> lambda calculus. Now I've found in the Haskell programming language that
>> there is a library named Control.Arrow. I've read on Haskell wiki that
>> Control.Arrow is a generalization of monads. So, is that library related in
>> same way with the Arrows calculus?
>>
>> Thanks in advance for any answer.
>>
>> Luca._______________________________________________
>> Beginners mailing list
>> [email protected]
>> http://www.haskell.org/mailman/listinfo/beginners
>
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 23, Issue 44
*****************************************