On Tue, 31 Mar 2015 04:14:35 +0200, Jeffrey Brown <jeffbrown.the@gmail.com> wrote:
:
I am trying to modify Layout.hs [1] to permit a variable number, rather:
than a fixed number, of text entry boxes. I shrank the program, mostly by
removing features, until it was this:
main = start $ do
f <- frame [text := "Layout test"]
p <- panel f []
xinput <- textEntry p [text := "100"]
yinput <- textEntry p [text := "100"]
myVar <- varCreate [xinput,yinput]
set f [ layout := container p $ margin 10 $
column 5 [boxed "coordinates" (grid 5 5
[[hfill $ widget xinput], [hfill $ widget yinput]] -- replacing
) ] ]
return ()
I want to replace the line marked "replacing". Rather than hard-coding the
number of text entry boxes (2), I want it to deal with a mutable collection
of them, in myVar.
I tried this:
[ fmap (\e -> hfill $ widget e) $ varGet myVar ]
The result of varGet is of type "IO something", you must convert that to "something", by using "<-". You can do this by adding the line:
inputs <- map (\e -> [hfill $ widget e]) <$> varGet myVar
before the set command (note the square brackets). The <$> operator is from module Data.Functor and is defined as
(<$>) = fmap
The main function becomes this:
main = start $ do
f <- frame [text := "Layout test"]
p <- panel f []
xinput <- textEntry p [text := "100"]
yinput <- textEntry p [text := "100"]
myVar <- varCreate [xinput, yinput]
inputs <- map (\e -> [hfill $ widget e]) <$> varGet myVar
set f [ layout := container p $ margin 10 $
column 5 [boxed "coordinates" (grid 5 5 inputs)]
]
return ()
Regards,
Henk-Jan van Tuyl
--
Folding@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
--