[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