<div dir="ltr"><div style="font-size:13px">funB = flip takeWhile primes . ( . join (*)) . flip (<=)</div><div><br></div><div><div style="font-size:13px">funB x = flip takeWhile primes ((( . join (*)) . flip (<=)) x)</div></div><div style="font-size:13px"><br></div><div style="font-size:13px">funB x = takeWhile ((( . join (*)) . flip (<=)) x) primes<br></div><div style="font-size:13px"><br></div><div style="font-size:13px"><div>funB x = takeWhile (foo x) primes<br></div><div><br></div></div><div style="font-size:13px"><br></div><div style="font-size:13px">foo x = (( . join (*)) . flip (<=)) x</div><div style="font-size:13px"><br></div><div style="font-size:13px">foo x = (( . join (*)) (flip (<=) x)<br></div><div style="font-size:13px"><br></div><div style="font-size:13px">foo x = flip (<=) x . join (*)<br></div><div style="font-size:13px"><br></div><div style="font-size:13px">foo x = (x <=) . join (*)<br></div><div><br></div><div><br></div><div>-- join :: Monad m => m (m a) -> m a</div><div>-- join (*) == (**2)</div><div><br></div><div><div style="font-size:13px">foo x = (x <=) . (** 2)<br></div></div><div style="font-size:13px"><br></div><div style="font-size:13px">foo x y = x <= (y ** 2)<br></div><div style="font-size:13px"><br></div><div style="font-size:13px">isLessThanTheSquareOf = foo</div><div style="font-size:13px"><br></div><div style="font-size:13px">funB x = takeWhile (x `isLessThanTheSquareOf`) primes</div><div style="font-size:13px"><br></div><div style="font-size:13px"><br></div><div style="font-size:13px">Helpful?</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 19, 2014 at 2:52 PM, Magicloud Magiclouds <span dir="ltr"><<a href="mailto:magicloud.magiclouds@gmail.com" target="_blank">magicloud.magiclouds@gmail.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>  Following code is to get a list of primes. Now it is hard for me to understand funB. I mean I can see what it does. But I cannot see the detailed process by every language part.<br><div><br></div><div><div>import Control.Monad</div><div><br></div><div>isPrime :: Integer -> Bool</div><div>isPrime i = ap funA funB i</div><div><br></div><div>funA :: Integer -> [Integer] -> Bool</div><div>funA x xs = all (\x' -> (mod x x') /= 0) xs</div><div><br></div><div>funB :: Integer -> [Integer]</div><div>funB = flip takeWhile primes . ( . join (*)) . flip (<=)</div><div><br></div><div>primes :: [Integer]</div><div>primes = 2 : filter isPrime [3, 5 ..]</div><div><br></div><div>main :: IO ()</div><div>main = print $ take 10 primes</div><span class="HOEnZb"><font color="#888888"><div><br></div>-- <br><div>竹密岂妨流水过<br>山高哪阻野云飞<br><br>And for G+, please use magiclouds#<a href="http://gmail.com" target="_blank">gmail.com</a>.</div>
</font></span></div></div></div>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div></div>