> If I used the overloaded call operator, all the functions would have to > inherit/derive from the base Function type?
No the call operator works just like any other `proc` it just has special syntax. If you didn't want to use that syntax in your exported module and just use it as an implementation detail, I wouldn't worry about it. Also you could model it like this and avoid those unsafe pointer casts. type StateFn = object rep: proc(b: var bool): StateFn Run