
On Tue, 31 Mar 2015 04:14:35 +0200, Jeffrey Brown
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 --