Add a concrete app object to run the CircuitSimulation.
Introduce the next phase of my studies with a trait, FunctionalQueue.

Next, I'll be studying how Scala does type parameterization. The focus
of the next chapter of my studies will be creating a functional data
structure, Queue.

For extra credit, I'm going to be also have it implement this trait,
FunctionalQueue.
Add SlowAppendQueue, which implements FunctionalQueue in terms of List.

Appending, however, is slow, due to the nature of the underlying data
structure, List. What can we do to solve this?
Add SlowHeadQueue, which implements FunctionalQueue in terms of a reversed List.

Now enqueue is constant time, but head and tail are not. They now take
time proportional to the number of elements stored in the queue.

Looking at SlowHeadQueue and SlowAppendQueue, it does not seem easy
to come up with an implementation that’s constant time for all three
operations.

In fact, it looks doubtful that this is even possible!