
On Jan 29, 2008 2:57 PM, Andrea Rossato
On Tue, Jan 29, 2008 at 08:41:28PM +0100, Andrea Rossato wrote:
Tue Jan 29 20:29:03 CET 2008 Andrea Rossato
* Add a LayoutCombinator class and a CombinedLayout and port PerWorkspace to the new system just to let you know that this will be amended. I'm going to remove the necessity of implementing doFirst (it was needed just to decide which layout description to use)!
Yes, this is a problem with PerWorkspace in particular -- the description method is pure, but the chooser method must be in the X monad to have access to the current stackset, in order to figure out which workspace is current. So in order to get the description method right, the decision of chooser must be cached as part of the data type so that description can show the description for the correct layout. This is what PerWorkspace used to do. This only means that PerWorkspace is not a particularly good example of the power of CombinedLayout, but in general I think CombinedLayout is great. There is another problem with PerWorkspace which I will detail in a later e-mail. To make a long story short, PerWorkspace is an awful, ugly hack, and I'm sorry now that I wrote it. =) I'd like to propose moving this functionality into the core, but in a later e-mail I will detail my arguments for this along with a patch and various proofs of safety. -Brent