gtk2hs 小部件列表

list of gtk2hs widgets

如何创建一个接受某些类型类的不同实例的列表(或其他任何东西。虽然不是元组)? 具体来说,我想做如下事情:

[labelNew (Just "foo"), buttonNewWithLabel "bar"]

我不关心语法糖,我只想将小部件列表传递给一个函数,该函数会将它们传递给另一个接受任何小部件的函数。

现在的目的只是为了消除线路噪音,就像那样

boxPackStart box content1 PackNatural 0
boxPackStart box content2 PackNatural 0
...
boxPackStart box content100 PackNatural 0

应该是例如

box <- col PackNatural [content1, content2, ..., content100]

我发现有些页面提到了一些动态列表,但当它说 "not typesafe"

时就停止阅读了

对于具体的小部件,您可以使用

toWidget :: WidgetClass o => o -> Widget

安全地将标签和按钮上传到小部件,如:

do
    label <- labelNew (Just "foo")
    button <- buttonNewWithLabel "bar"
    col PackNatural [toWidget label, toWidget button]

其他gtk2hs 类有类似的转换功能;通常在该包集合中,to* 是安全的向上转换而 castTo* 是不安全的向下转换。