<div dir="ltr">No wonder Haskell won't catch on... I saw code that looked just like that on the wall of a pyramid on an episode Ancient Aliens recently!<div><div><br></div><div>April fool by the way!</div><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 31 March 2015 at 23:51, Henk-Jan van Tuyl <span dir="ltr"><<a href="mailto:hjgtuyl@chello.nl" target="_blank">hjgtuyl@chello.nl</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Tue, 31 Mar 2015 22:11:47 +0200, Jeffrey Brown <<a href="mailto:jeffbrown.the@gmail.com" target="_blank">jeffbrown.the@gmail.com</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
It works! And I don't understand it! Particularly this line:<br>
<br>
  inputs <- map (\e -> [hfill $ widget e]) <$> varGet myVar<br>
<br>
I'm considering the type signatures:<br>
  map :: (a -> b) -> [a] -> [b]<br>
  (<$>) :: Functor f => (a -> b) -> f a -> f b<br>
  varGet :: Var a -> IO a<br>
map and <$> (fmap) are nearly synonymous; map seems like a special case of<br>
fmap. I gather the fmap must be to map inside the IO type that varGet<br>
returns, and the map must be mapping across some list. But what about their<br>
function arguments? Is map using the lambda expression, or is fmap? What<br>
function argument is the other one using? Are they both somehow sharing the<br>
lambda expression?<br>
</blockquote>
<br></span>
The expression<br>
  f <$> x<br>
is equal to<br>
  fmap f x<br>
. If<br>
  f :: a -> b<br>
  x :: IO a<br>
then<br>
  fmap f :: IO a -> IO b<br>
. You could say, fmap lifts f to the IO monad (you could also use liftM for this).<br>
<br>
In your case, f is<span class=""><br>
  map (\e -> [hfill $ widget e])<br></span>
and x is<br>
  varGet myVar<br>
You stored a list of textEntrys in myVar, the lambda expression is mapped over this list.<br>
<br>
Another way to look at it: you can replace the line<span class=""><br>
  inputs <- map (\e -> [hfill $ widget e]) <$> varGet myVar<br></span>
with<br>
  xs <- varGet myVar<br>
  let inputs = map (\e -> [hfill $ widget e]) xs<span class="im HOEnZb"><br>
<br>
Regards,<br>
Henk-Jan van Tuyl<br>
<br>
<br>
-- <br>
Folding@home<br>
What if you could share your unused computer power to help find a cure? In just 5 minutes you can join the world's biggest networked computer and get us closer sooner. Watch the video.<br>
<a href="http://folding.stanford.edu/" target="_blank">http://folding.stanford.edu/</a><br>
<br>
<br>
<a href="http://Van.Tuyl.eu/" target="_blank">http://Van.Tuyl.eu/</a><br>
<a href="http://members.chello.nl/hjgtuyl/tourdemonad.html" target="_blank">http://members.chello.nl/<u></u>hjgtuyl/tourdemonad.html</a><br>
Haskell programming<br>
--<br></span><div class="HOEnZb"><div class="h5">
______________________________<u></u>_________________<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-<u></u>bin/mailman/listinfo/beginners</a><br>
</div></div></blockquote></div><br></div>