[Haskell-beginners] Mutable collection of gui objects (wxHaskell)
Henk-Jan van Tuyl
hjgtuyl at chello.nl
Tue Mar 31 22:51:44 UTC 2015
On Tue, 31 Mar 2015 22:11:47 +0200, Jeffrey Brown
<jeffbrown.the at gmail.com> wrote:
> It works! And I don't understand it! Particularly this line:
>
> inputs <- map (\e -> [hfill $ widget e]) <$> varGet myVar
>
> I'm considering the type signatures:
> map :: (a -> b) -> [a] -> [b]
> (<$>) :: Functor f => (a -> b) -> f a -> f b
> varGet :: Var a -> IO a
> map and <$> (fmap) are nearly synonymous; map seems like a special case
> of
> fmap. I gather the fmap must be to map inside the IO type that varGet
> returns, and the map must be mapping across some list. But what about
> their
> function arguments? Is map using the lambda expression, or is fmap? What
> function argument is the other one using? Are they both somehow sharing
> the
> lambda expression?
The expression
f <$> x
is equal to
fmap f x
. If
f :: a -> b
x :: IO a
then
fmap f :: IO a -> IO b
. You could say, fmap lifts f to the IO monad (you could also use liftM
for this).
In your case, f is
map (\e -> [hfill $ widget e])
and x is
varGet myVar
You stored a list of textEntrys in myVar, the lambda expression is mapped
over this list.
Another way to look at it: you can replace the line
inputs <- map (\e -> [hfill $ widget e]) <$> varGet myVar
with
xs <- varGet myVar
let inputs = map (\e -> [hfill $ widget e]) xs
Regards,
Henk-Jan van Tuyl
--
Folding at home
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.
http://folding.stanford.edu/
http://Van.Tuyl.eu/
http://members.chello.nl/hjgtuyl/tourdemonad.html
Haskell programming
--
More information about the Beginners
mailing list