Recap of what has been done in be1a66a68c95dffe4ca737504c7a58a339600eb4 and 0156835f89110ca67c9481286eaff77a0802c881:
Clearer Model interface: that means, for example, that querying room.neighbor(direction) returns an actual Room for example. Modifications pass through the Lens, that as opposed to the first case, act directly modifying RoomRef and ItemRef
Removed Player and GameState class, now collapsed into State. This was unavoidable at a certain point, as going ahead it becomes impossible to work with Lens, or lens composition, having these entities in separate files
General renaming: now, everything that is directly "mixable" into a model ends with "ext", and something more
Tried to bring messages outside the state, but revert to the original structure: the main problem here is that reactions can only access the state to do modifications. To have messages and state separated, we should modify Reactions in something like (State,Set[Message) => (State, Set[Message]), and doing some more dirty things in the pipeline/game components;
Set Ground as a part of the State: this is conceptually more correct, than having a flying Ground used into the interpreter, for example;
For the same reason, now the Interpreter does not takes any argument, except the state. This because recently, both the ground and the dictionary[verb,item] have been inserted into the state. everything is there yet, passing them separately is not necessary anymore.
Better organization of factories inside the model (that are builders, actually), following the mixable fashion.
override Room's and Item's toString with the name (for utility)
made items and rooms comparable beased on refs, overriding ::equals() accordingly. This is not unsafe anymore, as problems with double references have been overcome.
Better constructor, review if Room has set of ItemRef or Item, evaluate types in package object, ...