[Haskell-beginners] Mutable collection of gui objects (wxHaskell)
Jeffrey Brown
jeffbrown.the at gmail.com
Tue Mar 31 02:14:35 UTC 2015
Hi,
On Github, Jeremy O'Donoghue provides wx example code. From his collection
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 ]
and got this error:
Layout.hs:23:11:
Couldn't match type `IO' with `[]'
Expected type: [Layout]
Actual type: IO Layout
In the expression: fmap (\ e -> hfill $ widget e) $ varGet myVar
In the third argument of `grid', namely
`[fmap (\ e -> hfill $ widget e) $ varGet myVar]'
In the second argument of `boxed', namely
`(grid 5 5 [fmap (\ e -> hfill $ widget e) $ varGet myVar])'
So then I tried something I thought would be equivalent:
[[ (hfill $ widget e) | e <- (varGet myVar)]]
and got a different error:
Layout.hs:23:39:
Couldn't match expected type `[w0]'
with actual type `IO [TextCtrl ()]'
In the return type of a call of `varGet'
In the expression: (varGet myVar)
In a stmt of a list comprehension: e <- (varGet myVar)
I kind of understand the problem is that when I varGet myVar, I end up with
type IO Layout, rather than type Layout, but I don't know what to do about
it.
Thanks,
Jeff
[1] https://github.com/jodonoghue/wxHaskell/blob/master/samples/wx/Layout.hs
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20150330/b4401c2c/attachment.html>
More information about the Beginners
mailing list