The reason I went with classes is because there needs to be some map from symbol to object and the class lookup table provided a built in way as opposed to storing our own hash. However, arguments could definitely be made for a hash I think. Functions or instances of Phone would have to use a hash. I like the domain semantics of using classes, but it's not a something I'll cling to.

Things have gotten a bit messy with the class eval so I definitely agree that tidying it up or getting rid of it would be good. It started with injecting the articulation into the class and then I figured if that was effectively a constant why not make other things constants at class creation time, but then some other stuff just got added as regular methods so it's a jumble. Using class eval does mean `symbol` doesn't have to be persisted within the class, but there's not much other benefit.

I sense some influence from your recent excursions into functional programming in the suggestion to use lambdas. It's awesome to get that some of perspective!

I will have a play around with possibilities, especially with the functional idea to see if I can wrap my head around it and make it work.