Send Beginners mailing list submissions to
        beginners@haskell.org

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
        beginners-requ...@haskell.org

You can reach the person managing the list at
        beginners-ow...@haskell.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."


Today's Topics:

   1. Re:  Understanding State (Jan Jakubuv)
   2. Re:  Understanding State (Jan Jakubuv)
   3.  Re: Understanding State (Maur??cio)
   4. Re:  decorate-sort-undecorate in haskell (Ivan Uemlianin)
   5.  The Applicative instance for ((->) a) (Ian Duncan)
   6. Re:  The Applicative instance for ((->) a) (Tony Morris)
   7. Re:  The Applicative instance for ((->) a) (Thomas Davie)
   8. Re:  The Applicative instance for ((->) a) (Tony Morris)
   9.  List.sort (Patrick LeBoutillier)
  10. Re:  List.sort (Thomas Davie)


----------------------------------------------------------------------

Message: 1
Date: Fri, 10 Jul 2009 10:46:19 +0100
From: Jan Jakubuv <jaku...@gmail.com>
Subject: Re: [Haskell-beginners] Understanding State
To: Geoffrey Marchant <geoffrey.march...@gmail.com>
Cc: beginners@haskell.org
Message-ID: <20090710094619.ga30...@lxultra2.macs.hw.ac.uk>
Content-Type: text/plain; charset=us-ascii

Hello Geoffrey,

when you really want to make the first function parameter (`a -> (r,a)`) a
monad, you can use `r` as the state instead of `a` (and `[a]`). Then both
the first parameter and the result are in the same monad `State r` and you
can write:

    update2 :: State r a -> Int -> [a] -> State r [a]
    update2 sm 0 (a:as) = sm >>= return . (:as)
    update2 sm i (a:as) = update2 sm (i-1) as >>= return . (a:)

Nevertheless in both cases (update' and update2) you need to pass some bogus
initial state (or a value in the case of update') to run the computation. In
this case I would use the `Writer r` monad anyway.

Finally just note that `State a` and `State [a]` are different monads and
they can not be easily used in the same computation (although it's indeed
possible).

Sincerely, 
  Jan.


On Thu, Jul 09, 2009 at 10:34:29PM -0600, Geoffrey Marchant wrote:
> 
> Which leads to me writing this:
> 
> > update' s 0 = do
> >    (a:as) <- get
> >    let (r, a') = runState s a
> >    put (a':as)
> >    return r
> > update' s i = do
> >    (a:as) <- get
> >    put as
> >    r <- update' s (i-1)
> >    as' <- get
> >    put (a:as')
> >    return r
> 


-- 
Heriot-Watt University is a Scottish charity
registered under charity number SC000278.



------------------------------

Message: 2
Date: Fri, 10 Jul 2009 10:59:39 +0100
From: Jan Jakubuv <jaku...@gmail.com>
Subject: Re: [Haskell-beginners] Understanding State
To: Jan Jakubuv <jaku...@gmail.com>
Cc: beginners@haskell.org
Message-ID: <20090710095939.gb30...@lxultra2.macs.hw.ac.uk>
Content-Type: text/plain; charset=us-ascii

Hi again,

sorry, now I see that it is not probably what you wanted because the first
monad parameter does not depend on `a`. So better try this version where the
first parameter is not a monad at all:

    update3 :: (a -> (r,a)) -> Int -> [a] -> State r [a]
    update3 f 0 (a:as) = let (r,a') = f a in put r >> return (a':as)
    update3 f i (a:as) = update3 f (i-1) as >>= return . (a:)

Sincerely,
    Jan.


On Fri, Jul 10, 2009 at 10:46:19AM +0100, Jan Jakubuv wrote:
> Hello Geoffrey,
> 
> when you really want to make the first function parameter (`a -> (r,a)`) a
> monad, you can use `r` as the state instead of `a` (and `[a]`). Then both
> the first parameter and the result are in the same monad `State r` and you
> can write:
> 
>     update2 :: State r a -> Int -> [a] -> State r [a]
>     update2 sm 0 (a:as) = sm >>= return . (:as)
>     update2 sm i (a:as) = update2 sm (i-1) as >>= return . (a:)
> 


-- 
Heriot-Watt University is a Scottish charity
registered under charity number SC000278.



------------------------------

Message: 3
Date: Fri, 10 Jul 2009 10:42:12 -0300
From: Maur??cio <briqueabra...@yahoo.com>
Subject: [Haskell-beginners] Re: Understanding State
To: beginners@haskell.org
Message-ID: <h37gfl$8o...@ger.gmane.org>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

> sorry, now I see that it is not probably what you wanted because the first
> monad parameter does not depend on `a`. So better try this version where the
> first parameter is not a monad at all:

Geoffrey,

Maybe you can give us an example on how you intend to use that
code. Any of Jan's examples, or even others, can be a choice
depending on that. For instance, are you going to update a full
list with a single Int parameter, and then update a list many
times with changing parameters? Are you going to take a single
element and update it many times? Where are those Ints and rs
comming from?

Maurício



------------------------------

Message: 4
Date: Sat, 11 Jul 2009 11:28:40 +0100
From: Ivan Uemlianin <i...@llaisdy.com>
Subject: Re: [Haskell-beginners] decorate-sort-undecorate in haskell
To: beginners@haskell.org
Message-ID: <4a586958.7020...@llaisdy.com>
Content-Type: text/plain; charset=ISO-8859-15; format=flowed

Dear All
> I'll report back once I've written up.
I hope this doesn't count as blog spam. 

I've written up the new Haskell language features from the responses to 
my query on decorate-sort-undecorate:

http://llaisdy.wordpress.com/2009/07/11/decorate-sort-undecorate-in-haskell-advanced

dot (function composition) and dollar look very handy, and of course 
lambda.  The Arrow robot &&& I think I shall leave aside for now.
> Thanks to everyone for your comments.
And best wishes

Ivan

-- 
============================================================
Ivan A. Uemlianin
Speech Technology Research and Development

                    i...@llaisdy.com
                     www.llaisdy.com
                         llaisdy.wordpress.com
                     www.linkedin.com/in/ivanuemlianin

    "Froh, froh! Wie seine Sonnen, seine Sonnen fliegen"
                     (Schiller, Beethoven)
============================================================



------------------------------

Message: 5
Date: Sat, 11 Jul 2009 19:54:24 +0900
From: Ian Duncan <iand...@gmail.com>
Subject: [Haskell-beginners] The Applicative instance for ((->) a)
To: Beginners@haskell.org
Message-ID: <4a586f60.50...@gmail.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

Hey folks, I understand most of what is going on with the applicative 
class, but I can't figure out why this instance is useful:
"instance Applicative ((->) a) where..."

Can anyone offer some intuition into how this is could be used?

Ian Duncan



------------------------------

Message: 6
Date: Sat, 11 Jul 2009 21:54:32 +1000
From: Tony Morris <tonymor...@gmail.com>
Subject: Re: [Haskell-beginners] The Applicative instance for ((->) a)
To: Ian Duncan <iand...@gmail.com>
Cc: Beginners@haskell.org
Message-ID: <4a587d78.1090...@gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

Here are a couple of examples

> (+) <$> Just 7 <*> Just 8
Just 15

> (*) <$> [1, 2, 3] <*> [4, 5, 6]
[4,5,6,8,10,12,12,15,18]


Ian Duncan wrote:
> Hey folks, I understand most of what is going on with the applicative
> class, but I can't figure out why this instance is useful:
> "instance Applicative ((->) a) where..."
>
> Can anyone offer some intuition into how this is could be used?
>
> Ian Duncan
>
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>

-- 
Tony Morris
http://tmorris.net/




------------------------------

Message: 7
Date: Sat, 11 Jul 2009 14:03:50 +0200
From: Thomas Davie <tom.da...@gmail.com>
Subject: Re: [Haskell-beginners] The Applicative instance for ((->) a)
To: Tony Morris <tonymor...@gmail.com>
Cc: Beginners@haskell.org
Message-ID: <28f424a7-fb90-4fa8-a720-aad2e0881...@gmail.com>
Content-Type: text/plain; charset=US-ASCII; format=flowed


On 11 Jul 2009, at 13:54, Tony Morris wrote:

> Here are a couple of examples
>
>> (+) <$> Just 7 <*> Just 8
> Just 15
>
>> (*) <$> [1, 2, 3] <*> [4, 5, 6]
> [4,5,6,8,10,12,12,15,18]

Those are for Maybe and [] respectively though, not ((->) a)

Bob


------------------------------

Message: 8
Date: Sat, 11 Jul 2009 22:30:32 +1000
From: Tony Morris <tonymor...@gmail.com>
Subject: Re: [Haskell-beginners] The Applicative instance for ((->) a)
To: Thomas Davie <tom.da...@gmail.com>
Cc: Beginners@haskell.org
Message-ID: <4a5885e8.8030...@gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

Woops sorry, try again.

> let f = (+) <$> (+1) <*> (*7) in f 2
17

Consider:
\f g a -> f a `k` g a

can be rewritten:
liftA2 k


Thomas Davie wrote:
>
> On 11 Jul 2009, at 13:54, Tony Morris wrote:
>
>> Here are a couple of examples
>>
>>> (+) <$> Just 7 <*> Just 8
>> Just 15
>>
>>> (*) <$> [1, 2, 3] <*> [4, 5, 6]
>> [4,5,6,8,10,12,12,15,18]
>
> Those are for Maybe and [] respectively though, not ((->) a)
>
> Bob
>

-- 
Tony Morris
http://tmorris.net/




------------------------------

Message: 9
Date: Sat, 11 Jul 2009 09:06:21 -0400
From: Patrick LeBoutillier <patrick.leboutill...@gmail.com>
Subject: [Haskell-beginners] List.sort
To: beginners <beginners@haskell.org>
Message-ID:
        <b217a64f0907110606h7fdde06clec2dfcdde0536...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

Hi,

I see the type of the List.sort function is:

  Ord a => [a] -> [a]

I don't understand how this type can allow it to sort pairs:

Prelude> :m +List
Prelude List> sort [(1, "1"), (3, "3"), (2, "2")]
[(1,"1"),(2,"2"),(3,"3")]

How can a pair by of type "Ord a"? Is it a rule that the first element
is automatically used?


Patrick

-- 
=====================
Patrick LeBoutillier
Rosemère, Québec, Canada


------------------------------

Message: 10
Date: Sat, 11 Jul 2009 15:13:27 +0200
From: Thomas Davie <tom.da...@gmail.com>
Subject: Re: [Haskell-beginners] List.sort
To: Patrick LeBoutillier <patrick.leboutill...@gmail.com>
Cc: beginners <beginners@haskell.org>
Message-ID: <cdf999e6-9b8e-4627-b109-e2fd2f348...@gmail.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

instance (Ord a, Ord b) => Ord (a,b) where
   compare (x,y) (z,w) =
     case compare x z of
       EQ -> compare y w
       c  -> c

Not certain that's the exact code that's used, but it's close enough.

Bob

On 11 Jul 2009, at 15:06, Patrick LeBoutillier wrote:

> Hi,
>
> I see the type of the List.sort function is:
>
>  Ord a => [a] -> [a]
>
> I don't understand how this type can allow it to sort pairs:
>
> Prelude> :m +List
> Prelude List> sort [(1, "1"), (3, "3"), (2, "2")]
> [(1,"1"),(2,"2"),(3,"3")]
>
> How can a pair by of type "Ord a"? Is it a rule that the first element
> is automatically used?
>
>
> Patrick
>
> -- 
> =====================
> Patrick LeBoutillier
> Rosemère, Québec, Canada
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://www.haskell.org/mailman/listinfo/beginners



------------------------------

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners


End of Beginners Digest, Vol 13, Issue 6
****************************************

Reply via email to