<div dir="ltr"><div><div><div><div>If you are using do notation, you can't.  If you aren't you can write<br><br></div>tupled s = (rev s, cap s)<br><br></div>Your old tupled is equivalent to this<br><br></div>tupled = rev >>= \s -> cap >>= \c -> return (s, c)<br><br></div>which is quite different.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 13, 2017 at 3:05 PM, mike h <span dir="ltr"><<a href="mailto:mike_k_houghton@yahoo.co.uk" target="_blank">mike_k_houghton@yahoo.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">That certainly helps me  David, thanks.<div>How then would you write</div><div><span class=""><blockquote type="cite"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">tupled :: String -> (String, String)</blockquote></div></div></blockquote><br><div> </div></span><div>with the parameter written explicitly? i.e.</div><div><br></div><div>tupled s = do …</div><div><br></div><div>or does the question not make sense in light of your earlier reply?</div><div><br></div><div>Thanks</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Mike</div></font></span><div><div class="h5"><div><br></div><div><br></div><div><br></div><div><br><div><blockquote type="cite"><div>On 13 Oct 2017, at 19:35, David McBride <<a href="mailto:toad3k@gmail.com" target="_blank">toad3k@gmail.com</a>> wrote:</div><br class="m_5963109587127880927Apple-interchange-newline"><div><div dir="ltr"><div><div><div><div><div><div>Functions are Monads.<br><br></div>:i Monad<br>class Applicative m => Monad (m :: * -> *) where<br>  (>>=) :: m a -> (a -> m b) -> m b<br>  (>>) :: m a -> m b -> m b<br>  return :: a -> m a<br>...<br>instance Monad (Either e) -- Defined in ‘Data.Either’<br>instance Monad [] -- Defined in ‘GHC.Base’<br>...<br>instance Monad ((->) r) -- Defined in ‘GHC.Base’<br><br></div>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<br><br></div>(>>=) :: ((->) r) a -> (a -> ((-> r) b) -> ((-> r) b)<br></div>(>>=) :: (r -> a) -> (a -> (r -> b)) -> (r -> b) -- simplified<br></div><div>return :: a -> (r -> a)<br><br></div><div>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.<br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 13, 2017 at 2:15 PM, mike h <span dir="ltr"><<a href="mailto:mike_k_houghton@yahoo.co.uk" target="_blank">mike_k_houghton@yahoo.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote"><br>
I have<br>
<br>
cap :: String -> String<br>
cap = toUpper<br>
<br>
rev :: String -> String<br>
rev = reverse<br>
<br>
then I make<br>
<br>
tupled :: String -> (String, String)<br>
tupled = do<br>
    r <- rev<br>
    c <- cap<br>
    return (r, c)<br>
<br>
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<br>
I’m not sure how tupled  works!!!<br>
My first shot was supplying a param s like this<br>
<br>
tupled :: String -> (String, String)<br>
tupled s = do<br>
    r <- rev s<br>
    c <- cap s<br>
    return (r, c)<br>
<br>
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??<br>
<br>
Thanks<br>
<br>
Mike<br>
<br>
<br>
<br>
<br>
______________________________<wbr>_________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org" target="_blank">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/beginners</a><br>
</blockquote></div><br></div>
______________________________<wbr>_________________<br>Beginners mailing list<br><a href="mailto:Beginners@haskell.org" target="_blank">Beginners@haskell.org</a><br><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/beginners</a><br></div></blockquote></div><br></div></div></div></div></div><br>______________________________<wbr>_________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/beginners</a><br>
<br></blockquote></div><br></div>