2017-01-04 1 views
0

いくつかのtypeclassの異なるインスタンスを受け入れるリスト(またはタプルではありませんが)を作成するにはどうすればよいですか? 具体的には、私は次のような何かをしたい:gtk2hsウィジェットのリスト

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

私はちょうどその別の関数に渡します関数にウィジェットのリストを渡したい、構文糖のために気にしません任意のウィジェットを受け入れる。

は今、目的は

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

は、私はいくつかの動的リストに言及するいくつかのページを見つけましたが、読んで停止し、たとえばすべきことであるが、

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

のように、ラインノイズを取り除くことだけですそれは言ったときに使用することができ、特にウィジェットの

+0

通常の['Widget's](http://hackage.haskell.org/package/gtk3-0.14.6/docs/Graphics-UI-Gtk-Abstract-Widget)の通常のリストを使用するだけで問題はありますか? html#t:ウィジェット)? – leftaroundabout

+0

次のようなものですか? 'map(\ c - > boxPackStartボックスc PackNatural 0)[content1、content2、content3]' – mb21

答えて

1

「型保証されません」

toWidget :: WidgetClass o => o -> Widget 

ウィジェットのラベルやボタン安全にアップキャストに、のように:他のgtk2hsクラスは似たキャストの機能を持っている

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

。一般的にパッケージコレクションでは、to*は安全なアップキャストであり、castTo*は安全でないダウンキャストです。

関連する問題