Send Beginners mailing list submissions to
        beginners@haskell.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://mail.haskell.org/cgi-bin/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:  monad question (mike h)


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

Message: 1
Date: Sat, 14 Oct 2017 19:37:49 +0100
From: mike h <mike_k_hough...@yahoo.co.uk>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] monad question
Message-ID: <43f9e6c6-0e4e-4ea4-9443-ee1d58916...@yahoo.co.uk>
Content-Type: text/plain; charset="utf-8"

Thanks David.

> On 13 Oct 2017, at 20:13, David McBride <toa...@gmail.com> wrote:
> 
> If you are using do notation, you can't.  If you aren't you can write
> 
> tupled s = (rev s, cap s)
> 
> Your old tupled is equivalent to this
> 
> tupled = rev >>= \s -> cap >>= \c -> return (s, c)
> 
> which is quite different.
> 
> On Fri, Oct 13, 2017 at 3:05 PM, mike h <mike_k_hough...@yahoo.co.uk 
> <mailto:mike_k_hough...@yahoo.co.uk>> wrote:
> That certainly helps me  David, thanks.
> How then would you write
>> tupled :: String -> (String, String)
> 
>  
> with the parameter written explicitly? i.e.
> 
> tupled s = do …
> 
> or does the question not make sense in light of your earlier reply?
> 
> Thanks
> 
> Mike
> 
> 
> 
> 
>> On 13 Oct 2017, at 19:35, David McBride <toa...@gmail.com 
>> <mailto:toa...@gmail.com>> wrote:
>> 
>> Functions are Monads.
>> 
>> :i Monad
>> class Applicative m => Monad (m :: * -> *) where
>>   (>>=) :: m a -> (a -> m b) -> m b
>>   (>>) :: m a -> m b -> m b
>>   return :: a -> m a
>> ...
>> instance Monad (Either e) -- Defined in ‘Data.Either’
>> instance Monad [] -- Defined in ‘GHC.Base’
>> ...
>> instance Monad ((->) r) -- Defined in ‘GHC.Base’
>> 
>> That last instance means if I have a function whose first argument is type 
>> r, that is a monad.  And if you fill in the types of the various monad 
>> functions you would get something like this
>> 
>> (>>=) :: ((->) r) a -> (a -> ((-> r) b) -> ((-> r) b)
>> (>>=) :: (r -> a) -> (a -> (r -> b)) -> (r -> b) -- simplified
>> return :: a -> (r -> a)
>> 
>> So in the same way that (IO String) is a Monad and can use do notation, (a 
>> -> String) is also a Monad, and can also use do notation.  Hopefully that 
>> made sense.
>> 
>> On Fri, Oct 13, 2017 at 2:15 PM, mike h <mike_k_hough...@yahoo.co.uk 
>> <mailto:mike_k_hough...@yahoo.co.uk>> wrote:
>> 
>> I have
>> 
>> cap :: String -> String
>> cap = toUpper
>> 
>> rev :: String -> String
>> rev = reverse
>> 
>> then I make
>> 
>> tupled :: String -> (String, String)
>> tupled = do
>>     r <- rev
>>     c <- cap
>>     return (r, c)
>> 
>> and to be honest, yes it’s been a long day at work, and this is coding at 
>> home rather than coding (java) at work but
>> I’m not sure how tupled  works!!!
>> My first shot was supplying a param s like this
>> 
>> tupled :: String -> (String, String)
>> tupled s = do
>>     r <- rev s
>>     c <- cap s
>>     return (r, c)
>> 
>> which doesn’t compile. But how does the first version work? How does the 
>> string to be processed get into the rev and cap functions??
>> 
>> Thanks
>> 
>> Mike
>> 
>> 
>> 
>> 
>> _______________________________________________
>> Beginners mailing list
>> Beginners@haskell.org <mailto:Beginners@haskell.org>
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners 
>> <http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners>
>> 
>> _______________________________________________
>> Beginners mailing list
>> Beginners@haskell.org <mailto:Beginners@haskell.org>
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners 
>> <http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners>
> 
> 
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org <mailto:Beginners@haskell.org>
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners 
> <http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners>
> 
> 
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners

-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://mail.haskell.org/pipermail/beginners/attachments/20171014/60f0b911/attachment-0001.html>

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

Subject: Digest Footer

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


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

End of Beginners Digest, Vol 112, Issue 14
******************************************

Reply via email to