<div dir="ltr"><div><div><div><div>Thanks for the replies...<br></div>What I'm trying to do is a simple input system:<br><span style="font-family:monospace,monospace"><br>query :: IO (Maybe String)<br>query = do<br></span></div><div><span style="font-family:monospace,monospace">  putStrLn "Enter text or press q:"<br></span></div><div><span style="font-family:monospace,monospace">  r <- getLine<br>  return $ if r == "q" then Nothing else Just r</span><br><br></div>This will ask an input to the user which is returned, unless "q" is pressed.<br></div>I want to repeat this query "some" or "many" times:<br><span style="font-family:monospace,monospace"><br></span></div><div><span style="font-family:monospace,monospace">main = do<br>  qs <- some $ query<br>  --</span> <span style="font-family:monospace,monospace">qs <- many $ query</span></div><div><div><span style="font-family:monospace,monospace">  putStrLn qs</span><br></div><div><div><br></div><div>This should ask the query multiple times until "q" is pressed.<br></div><div>The type of qs is Maybe [String].<br></div><div>The expected result is that with "some", returning zero results will not be permitted, <span style="font-family:monospace,monospace"></span><span style="font-family:arial,helvetica,sans-serif">while with "many" it is.</span><br></div><div><br></div><div>Probably I should defined a newtype for IO Maybe:<br><span style="font-family:monospace,monospace">data IOMaybe a = IOMaybe {getIOMaybe :: IO (Maybe a)}<br></span><span style="font-family:arial,helvetica,sans-serif"><br></span></div><div><span style="font-family:arial,helvetica,sans-serif">And define all the instances.</span><span style="font-family:monospace,monospace"><br></span></div><div><span style="font-family:monospace,monospace"><br></span></div><div><span style="font-family:arial,helvetica,sans-serif">Or use Data.Fucntor.Compose:</span><span style="font-family:monospace,monospace"><br></span></div><div><span style="font-family:monospace,monospace">type IOMaybe = Compose IO Maybe<br></span></div><div><span style="font-family:monospace,monospace"><br></span></div><div><br></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 29, 2016 at 11:15 PM, Doaitse Swierstra <span dir="ltr"><<a href="mailto:doaitse.swierstra@gmail.com" target="_blank">doaitse.swierstra@gmail.com</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">The type of the last part of the expression is:<div><br></div><div><div style="margin:0px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">many $ Just 1 :: Num a => Maybe [a]</span></div><div style="margin:0px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures"><br></span></div><div style="margin:0px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">So in order to be able to return the “Just” constructor which inspected by the application of (take 3 <$>) we have somehow to know for sure that all the <*> executions will indeed see a “Just” in both of their arguments. This forces more and more evaluations.</span></div><span class="HOEnZb"><font color="#888888"><div style="margin:0px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures">  </span></div><div style="margin:0px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures"> Doaitse</span></div></font></span><div><div class="h5"><div style="margin:0px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures"><br></span></div><div style="margin:0px;line-height:normal;font-family:Menlo"><span style="font-variant-ligatures:no-common-ligatures"><br></span></div><div><div><blockquote type="cite"><div>Op 29 sep. 2016, om 22:28  heeft Jake <<a href="mailto:jake.waksbaum@gmail.com" target="_blank">jake.waksbaum@gmail.com</a>> het volgende geschreven:</div><br class="m_8891996586595844566Apple-interchange-newline"><div><div dir="ltr"><pre>take 3 $ many $ Just 1<br><br><font face="sans-serif">doesn't type check. Did you mean this?</font><br><br>take 3 <$> (many $ Just 1)</pre><pre><font face="sans-serif">I think this may have something to do with t<span style="font-size:13px">he </span></font><span style="font-family:sans-serif;font-size:13px">default definition of many in the definition of </span><a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#Alternative" style="font-family:sans-serif;font-size:13px" target="_blank">Alternative</a><span style="font-family:sans-serif;font-size:13px">:</span><br></pre><div><pre><span class="m_8891996586595844566inbox-inbox-hs-identifier" style="color:rgb(7,54,66)">many</span> <span class="m_8891996586595844566inbox-inbox-hs-glyph" style="color:rgb(220,50,47)">::</span> <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#local-1627395956" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-identifier m_8891996586595844566inbox-inbox-hs-type" style="color:rgb(95,95,175)">f</span></a> <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#local-1627395960" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-identifier m_8891996586595844566inbox-inbox-hs-type" style="color:rgb(95,95,175)">a</span></a> <span class="m_8891996586595844566inbox-inbox-hs-glyph" style="color:rgb(220,50,47)">-></span> <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#local-1627395956" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-identifier m_8891996586595844566inbox-inbox-hs-type" style="color:rgb(95,95,175)">f</span></a> <span class="m_8891996586595844566inbox-inbox-hs-special" style="color:rgb(220,50,47)">[</span><a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#local-1627395960" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-identifier m_8891996586595844566inbox-inbox-hs-type" style="color:rgb(95,95,175)">a</span></a><span class="m_8891996586595844566inbox-inbox-hs-special" style="color:rgb(220,50,47)">]</span>
<a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#many" class="m_8891996586595844566inbox-inbox-" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-identifier" style="color:rgb(7,54,66)">many</span></a> <a></a><a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#local-1627395964" class="m_8891996586595844566inbox-inbox-" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-identifier" style="color:rgb(7,54,66)">v</span></a> <span class="m_8891996586595844566inbox-inbox-hs-glyph" style="color:rgb(220,50,47)">=</span> <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#local-1627395965" class="m_8891996586595844566inbox-inbox-" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-var m_8891996586595844566inbox-inbox-hs-identifier" style="color:rgb(7,54,66)">many_v</span></a>
<a></a>  <span class="m_8891996586595844566inbox-inbox-hs-keyword" style="color:rgb(175,0,95)">where</span>
<a></a>    <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#local-1627395965" class="m_8891996586595844566inbox-inbox-" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-identifier" style="color:rgb(7,54,66)">many_v</span></a> <span class="m_8891996586595844566inbox-inbox-hs-glyph" style="color:rgb(220,50,47)">=</span> <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#local-1627395966" class="m_8891996586595844566inbox-inbox-" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-var m_8891996586595844566inbox-inbox-hs-identifier" style="color:rgb(7,54,66)">some_v</span></a> <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#%3C%7C%3E" class="m_8891996586595844566inbox-inbox-" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-var m_8891996586595844566inbox-inbox-hs-operator" style="color:rgb(211,54,130)"><|></span></a> <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#pure" class="m_8891996586595844566inbox-inbox-" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-var m_8891996586595844566inbox-inbox-hs-identifier" style="color:rgb(7,54,66)">pure</span></a> <span class="m_8891996586595844566inbox-inbox-hs-special" style="color:rgb(220,50,47)">[</span><span class="m_8891996586595844566inbox-inbox-hs-special" style="color:rgb(220,50,47)">]</span>
<a></a>    <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#local-1627395966" class="m_8891996586595844566inbox-inbox-" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-identifier" style="color:rgb(7,54,66)">some_v</span></a> <span class="m_8891996586595844566inbox-inbox-hs-glyph" style="color:rgb(220,50,47)">=</span> <span class="m_8891996586595844566inbox-inbox-hs-special" style="color:rgb(220,50,47)">(</span><a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#fmap" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-var m_8891996586595844566inbox-inbox-hs-identifier" style="color:rgb(7,54,66)">fmap</span></a> <span class="m_8891996586595844566inbox-inbox-hs-special" style="color:rgb(220,50,47)">(</span><span class="m_8891996586595844566inbox-inbox-hs-glyph" style="color:rgb(220,50,47)">:</span><span class="m_8891996586595844566inbox-inbox-hs-special" style="color:rgb(220,50,47)">)</span> <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#local-1627395964" class="m_8891996586595844566inbox-inbox-" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-var m_8891996586595844566inbox-inbox-hs-identifier" style="color:rgb(7,54,66)">v</span></a><span class="m_8891996586595844566inbox-inbox-hs-special" style="color:rgb(220,50,47)">)</span> <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#%3C%2A%3E" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-var m_8891996586595844566inbox-inbox-hs-operator" style="color:rgb(211,54,130)"><*></span></a> <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Base.html#local-1627395965" class="m_8891996586595844566inbox-inbox-" style="text-decoration:none;border-bottom:1px solid rgb(238,232,213)" target="_blank"><span class="m_8891996586595844566inbox-inbox-hs-var m_8891996586595844566inbox-inbox-hs-identifier" style="color:rgb(7,54,66)">many_v</span></a>
</pre>many_v and some_v are mutually recursive functions, and it may be that this prevents the thunks from being made available to take in some way. I'm really not sure though, this is just an idea about why this is not quite the same as (take $ repeat 1)</div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Sep 29, 2016 at 3:51 PM Corentin Dupont <<a href="mailto:corentin.dupont@gmail.com" target="_blank">corentin.dupont@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div><div><div><div><div><div><div>Hi guys,<br></div>I'm playing with the mysterious "some" and "many" from Control.Applicative.<br></div>If I try: <br><br><span style="font-family:monospace,monospace">many $ Just 1<br><br></span></div><span style="font-family:monospace,monospace"><font face="arial,helvetica,sans-serif">It just loops, I understand why:<br><a href="http://stackoverflow.com/questions/18108608/what-are-alternatives-some-and-many-useful-for" target="_blank">http://stackoverflow.com/<wbr>questions/18108608/what-are-<wbr>alternatives-some-and-many-<wbr>useful-for</a><br></font></span></div></div></div></div></div></div></div></div></div><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div><div><div><span style="font-family:monospace,monospace"><font face="arial,helvetica,sans-serif">It seems that some and many are usually used in a context where something is consumed, and can be depleted, so the loop ends.<br><br></font></span></div></div></div></div></div></div></div></div><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div><div><span style="font-family:monospace,monospace"><font face="arial,helvetica,sans-serif">But why doesn't this terminates?<br><br></font></span></div></div></div></div></div></div></div><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div><span style="font-family:monospace,monospace">take 3 $ many $ Just 1<br></span><span style="font-family:arial,helvetica,sans-serif"><br></span></div></div></div></div></div></div><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><span style="font-family:arial,helvetica,sans-serif">It's a recursive call, but the construction of the result should be lazy...<span><font color="#888888"><span><font color="#888888"><br></font></span></font></span></span><span><font color="#888888"><span></span></font></span><br></div></div></div></div></div>
______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div>
______________________________<wbr>_________________<br>Haskell-Cafe mailing list<br>To (un)subscribe, modify options or view archives go to:<br><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>Only members subscribed via the mailman list are allowed to post.</div></blockquote></div><br></div></div></div></div></div></blockquote></div><br></div>