Haskell 在Gtk2hs中,为什么TreeModelFace函数有时需要一个Iter,有时可能需要一个Iter

Haskell 在Gtk2hs中,为什么TreeModelFace函数有时需要一个Iter,有时可能需要一个Iter,haskell,gtk2hs,Haskell,Gtk2hs,在Gtk2hs中有Graphics.UI.Gtk.ModelView.CustomStore模块,其中包含一个包含函数集合的数据类型。它包含一系列函数,用于在用户定义的树类型中导航,其中位置存储为TreeIter。因此,成员函数之一是: treeModelIfaceIterNext :: TreeIter -> IO (Maybe TreeIter) 这将返回与下一个同级节点(如果存在)关联的TreeIter。很简单。但以下成员函数是: treeModelIfaceIterChildre

在Gtk2hs中有
Graphics.UI.Gtk.ModelView.CustomStore
模块,其中包含一个包含函数集合的数据类型。它包含一系列函数,用于在用户定义的树类型中导航,其中位置存储为
TreeIter
。因此,成员函数之一是:

treeModelIfaceIterNext :: TreeIter -> IO (Maybe TreeIter)
这将返回与下一个同级节点(如果存在)关联的
TreeIter
。很简单。但以下成员函数是:

treeModelIfaceIterChildren :: Maybe TreeIter -> IO (Maybe TreeIter)
这需要一个
可能的树编辑器
,而不是一个简单的
树编辑器
。文档中没有说明为什么使用
Nothing
的参数,也没有说明它的作用

问题:

  • 为什么参数类型会有这种变化

  • 如果不返回任何内容,
    treeModelIfaceIterChilren应该返回什么


  • 自从我使用
    TreeModelIface
    接口以来,已经有一段时间了,但如果我没记错的话,这一切都与树的根(或顶级)节点有关。因此,如果不使用任何东西来检索它们,则
    treeModelIfaceIterChilren,因为它们没有父对象。当您使用
    treeModelIfaceIterNext
    对同级进行迭代时,这不是问题。换句话说,要遍历整个树,
    treemodeliefaceiterchilren(如果没有任何内容)
    是您的起点,并且您可以依次调用
    treemodeliefaceiternext
    treemodeliefaceiterchilren
    (仅使用
    值)