Hi Nim community! 

I am a new user of Nim language. It's very fun to program with.

To know Nim better, I am creating a mini GUI for fun. I am currently facing a 
problem that I can not solve ..

I wish I could fill a sequence of widgets with different types (Layout, Button, 
..) but with a common parent (Widget).

I try the following in the 
[documentation](https://nim-lang.org/docs/manual.html#type-relations-covariance)
 but I do not understand the function of the keyword "out".

When I try the documentation code I get an error that I do not understand: "The 
out modifier can be used only with imported types"

So, I'm blocked with the following code: (I would like to make the commented 
code work)
    
    
    type
      Widget* = object of RootObj
      
      Layout* = ref object of Widget
        widgets*: seq[ref Widget]
        # widgets*: seq[ref Button]
      
      Button* = ref object of Widget
    
    
    proc newLayout(): ref Layout =
      new result
      result[] = new Layout
      result.widgets = @[]
    
    proc newButton(): ref Button =
      new result
      result[] = new Button
    
    proc addWidget(layout: ref Layout, widget: ref Widget) =
    # proc addWidget(layout: ref Layout, widget: ref Button) =
      layout.widgets.add widget
    
    
    var
      layout0 = newLayout()
      button0 = newButton()
    
    layout0.addWidget button0
    

Do you know if it is possible and how to match a type compared to that of his 
parent?

Reply via email to