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: function parameter types after flip (Daniel Fischer)
2. Re: some terminology (Maur??cio CA)
3. Re: Closure (Daniel Bastos)
4. monad transformers (Michael P Mossey)
5. Constructors as functions (was monad transformers)
(Michael P Mossey)
6. Re: monad transformers (Brandon S. Allbery KF8NH)
7. Re: Constructors as functions (was monad transformers)
(Isaac Dupree)
8. Re: Closure (Heinrich Apfelmus)
9. Circular programming (Maciej Piechotka)
10. Re: Circular programming (Peter Verswyvelen)
----------------------------------------------------------------------
Message: 1
Date: Thu, 13 Aug 2009 17:52:58 +0200
From: Daniel Fischer <[email protected]>
Subject: Re: [Haskell-beginners] function parameter types after flip
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset="iso-8859-1"
Am Donnerstag 13 August 2009 17:25:07 schrieb Robert Ziemba:
> Can anyone help me understand the behavior of the following
> expressions in ghci? I was trying to construct a flipped function
> 'elem' that would accept a list of characters first but I ran into
> this problem with the type signature. Thank you.
>
> Prelude Data.List Data.Char> :t elem
> elem :: (Eq a) => a -> [a] -> Bool -- OK
> Prelude Data.List Data.Char> :t (flip elem)
> (flip elem) :: (Eq a) => [a] -> a -> Bool -- OK this is what I want
> Prelude Data.List Data.Char> let fElem = (flip elem)
> Prelude Data.List Data.Char> :t fElem
> fElem :: [()] -> () -> Bool -- ?? Function
> will not accept a [Char]
It's the monomorphism restriction.
If you bind a name by a simple pattern binding (like [let] fElem = flip elem)
and don't
give a type signature, it must have a monomorphic type and in ghci, that
defaults to ()
for unconstrained type variables.
Ways to fix the behaviour:
1. give an explicit type signature (good in code files anyway, but cumbersome
at the ghci
prompt)
2. make it a function binding:
let fElem xs x = x `elem` xs
let fElem xs = (`elem` xs)
let fElem xs = flip elem xs
3. run ghci without the monomorphism restriction
Prelude> :set -XNoMonomorphismRestriction
Prelude> let fElem = flip elem
Prelude> :t fElem
fElem :: (Eq a) => [a] -> a -> Bool
(that would be a good entry in your .ghci file anyway, you rarely want it
unless you are a
compiler writer)
------------------------------
Message: 2
Date: Thu, 13 Aug 2009 14:34:12 -0300
From: Maur??cio CA <[email protected]>
Subject: [Haskell-beginners] Re: some terminology
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> I was looking at some code, saw a variable x, and said to myself, "Ah
> that variable is a monad." Then I realized "Monad" is the name of a type
> class. So maybe x should be called "an instance of a Monad." I think the
> word "instance" in this case is OO-like; but in Haskell "instance"
> refers to a type that is an instance of a type class. [...]
In general, it helps to know that the current "de facto" Haskell standard
actually accepts classes and instances built on top of many types:
class SomeClass a b c where
someF :: a -> b -> c
anotherF :: b -> c -> a
instance SomeClass T1 T2 T3 where
someF = ...
anotherF = ...
This way it becomes clear that saying that some type "is of" or
"instantiate" some class isn't apropriate.
Best,
Maurício
------------------------------
Message: 3
Date: Fri, 14 Aug 2009 23:46:02 +0000 (UTC)
From: Daniel Bastos <[email protected]>
Subject: [Haskell-beginners] Re: Closure
To: [email protected]
Message-ID: <[email protected]>
In article <[email protected]>,
Daniel Bastos wrote:
> In article <[email protected]>,
> Brent Yorgey wrote:
>
>> With that said, on some level the idea of a closure is really just an
>> implementation detail---I wouldn't say that understanding it is of
>> fundamental importance in learning Haskell. But learning things never
>> hurts (except when it does).
>
> So it sounds correct to say that a closure is a function that brings
> an environment with it, such as variables defined outside of it.
>
> With this ability, we can construct functions on the fly because a
> function can return a closure which is amended and, say, returned
> again another closure more fully specified.
Hello. This was actually a request for comments. Though I didn't say
it. Does that sound correct? Any comments? Thanks much.
------------------------------
Message: 4
Date: Fri, 14 Aug 2009 17:55:02 -0700
From: Michael P Mossey <[email protected]>
Subject: [Haskell-beginners] monad transformers
To: beginners <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
In Martin Grabmuller's tutorial "Monad Transformers Step by Step", found here
http://user.cs.tu-berlin.de/~magr/pub/Transformers.pdf
he gives an example of composing ErrorT, StateT, ReaderT, and WriterT. Early in
the paper, where he composes just ErrorT and ReaderT
type Eval3 a = ReaderT Env (ErrorT String Identity) a
he uses 'ask' and 'throwError' in some example code. I notice that he doesn't
have to lift throwError into the ErrorT monad. Why is this? Do I misunderstand
something about monad transformers? Is it a convenience definition of
throwError?
Same thing the rest of the paper. I don't see anywhere he lifts anything.
Thanks,
Mike
------------------------------
Message: 5
Date: Fri, 14 Aug 2009 18:03:59 -0700
From: Michael P Mossey <[email protected]>
Subject: [Haskell-beginners] Constructors as functions (was monad
transformers)
To: beginners <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Michael P Mossey wrote:
> In Martin Grabmuller's tutorial "Monad Transformers Step by Step", found
> here
>
> http://user.cs.tu-berlin.de/~magr/pub/Transformers.pdf
>
Additional question: in this paper he uses a data constructor in an interesting
way: back-quoting it to make it an operator. I thought, "Huh, a constructor is
a
lot like a function?" I did some experiments and found that I can map a
constructor over a list and I can compose a constructor with other functions.
Cool. So is a constructor a function, in every sense?
Thanks,
Mike
------------------------------
Message: 6
Date: Fri, 14 Aug 2009 21:05:14 -0400
From: "Brandon S. Allbery KF8NH" <[email protected]>
Subject: Re: [Haskell-beginners] monad transformers
To: Michael P Mossey <[email protected]>
Cc: beginners <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset="us-ascii"
On Aug 14, 2009, at 20:55 , Michael P Mossey wrote:
> In Martin Grabmuller's tutorial "Monad Transformers Step by Step",
> found here
>
> http://user.cs.tu-berlin.de/~magr/pub/Transformers.pdf
>
> he gives an example of composing ErrorT, StateT, ReaderT, and
> WriterT. Early in the paper, where he composes just ErrorT and ReaderT
>
> type Eval3 a = ReaderT Env (ErrorT String Identity) a
>
> he uses 'ask' and 'throwError' in some example code. I notice that
> he doesn't have to lift throwError into the ErrorT monad. Why is
> this? Do I misunderstand something about monad transformers? Is it a
> convenience definition of throwError?
Look for definitions of the form
> instance MonadReader Eval3 where ...
> instance MonadError Eval3 where ...
These effectively "import" definitions of ask, throwError, etc. with
implicit lifting.
--
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/20090814/9417d865/PGP-0001.bin
------------------------------
Message: 7
Date: Fri, 14 Aug 2009 21:10:40 -0400
From: Isaac Dupree <[email protected]>
Subject: Re: [Haskell-beginners] Constructors as functions (was monad
transformers)
To: Michael P Mossey <[email protected]>
Cc: beginners <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Michael P Mossey wrote:
> Michael P Mossey wrote:
>> In Martin Grabmuller's tutorial "Monad Transformers Step by Step",
>> found here
>>
>> http://user.cs.tu-berlin.de/~magr/pub/Transformers.pdf
>>
>
> Additional question: in this paper he uses a data constructor in an
> interesting way: back-quoting it to make it an operator. I thought,
> "Huh, a constructor is a lot like a function?" I did some experiments
> and found that I can map a constructor over a list and I can compose a
> constructor with other functions. Cool. So is a constructor a function,
> in every sense?
Yes. In expressions, a constructor is a function, no more and no less
(albeit with some weird capitalization). Constructors however, can
*also* be used in pattern-matching, unlike functions. That's the
(only?) special thing about them.
-Isaac
------------------------------
Message: 8
Date: Sat, 15 Aug 2009 09:44:16 +0200
From: Heinrich Apfelmus <[email protected]>
Subject: [Haskell-beginners] Re: Closure
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-15
Daniel Bastos wrote:
>
>> So it sounds correct to say that a closure is a function that brings
>> an environment with it, such as variables defined outside of it.
>>
>> With this ability, we can construct functions on the fly because a
>> function can return a closure which is amended and, say, returned
>> again another closure more fully specified.
>
> Hello. This was actually a request for comments. Though I didn't say
> it. Does that sound correct? Any comments? Thanks much.
Yes, that's pretty much correct.
The simplest example of a closure is indeed
foo = add 3
where
add = \x y -> x + y
Reduction to weak head normal form yields
foo = let x = 3 in \y -> x + y
which means that foo is a function \y -> x + y paired with the value
of the free variable x .
Note that closures are an implementation detail. From a semantic point
of view, add 3 can readily be understood as an ordinary function.
Regards,
apfelmus
--
http://apfelmus.nfshost.com
------------------------------
Message: 9
Date: Sat, 15 Aug 2009 09:16:06 +0000 (UTC)
From: Maciej Piechotka <[email protected]>
Subject: [Haskell-beginners] Circular programming
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=us-ascii
I'm not understending circular programming. What it is used for?
Where feedback variable came from (yes - I know it's wrong question as Haskell
is lazy)?
I've read http://www.haskell.org/haskellwiki/Circular_programming but I didn't
understend the concept and pattern.
Regards
------------------------------
Message: 10
Date: Sat, 15 Aug 2009 13:43:16 +0200
From: Peter Verswyvelen <[email protected]>
Subject: Re: [Haskell-beginners] Circular programming
To: Maciej Piechotka <[email protected]>
Cc: [email protected]
Message-ID:
<[email protected]>
Content-Type: text/plain; charset="iso-8859-1"
It might help to read the Yampa
Arcade<http://haskell.cs.yale.edu/yale/papers/haskell-workshop03/yampa-arcade.pdf>and
then Plugging
a Space Leak with an
Arrow<http://cs-www.cs.yale.edu/homes/hl293/download/leak.pdf>to get a
practical example of circuit and circular programming.
On Sat, Aug 15, 2009 at 11:16 AM, Maciej Piechotka <[email protected]>wrote:
> I'm not understending circular programming. What it is used for?
> Where feedback variable came from (yes - I know it's wrong question as
> Haskell
> is lazy)?
>
> I've read http://www.haskell.org/haskellwiki/Circular_programming but I
> didn't
> understend the concept and pattern.
>
> Regards
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
http://www.haskell.org/pipermail/beginners/attachments/20090815/d8755cf3/attachment.html
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 14, Issue 8
****************************************