dons:
The new layout code introduces more chances for runtime errors than I'd like. In particular, the Dynamic type, and the possibility of users defining empty layout lists.
And a patch, just so its archived somewhere. New patches: [Use a GADT for non-empty list checking Don Stewart <dons@cse.unsw.edu.au>**20070504041020] { hunk ./Config.hs 137 -defaultLayouts :: [Layout] -defaultLayouts = [ full, tall defaultDelta (1%2), wide defaultDelta (1%2) ] +defaultLayouts :: List NonEmpty Layout +defaultLayouts = full .:. tall defaultDelta (1%2) .:. wide defaultDelta (1%2) .:. Nil hunk ./Config.hs-boot 2 -import XMonad (Layout) +import XMonad (Layout,List,NonEmpty) hunk ./Config.hs-boot 4 -defaultLayouts :: [Layout] +defaultLayouts :: List NonEmpty Layout hunk ./Main.hs 58 - , focusedBorder = fbc - } + , focusedBorder = fbc } hunk ./Main.hs 61 - , layouts = M.empty - } + , layouts = M.empty } hunk ./Operations.hs 51 + hunk ./Operations.hs 53 + hunk ./Operations.hs 148 - fl = M.findWithDefault defaultLayouts n $ layouts s + fl = M.findWithDefault (toList defaultLayouts) n $ layouts s hunk ./XMonad.hs 20 - runX, io, withDisplay, isRoot, spawn, trace, whenJust + runX, io, withDisplay, isRoot, spawn, trace, whenJust, + toList, List(..), NonEmpty, (.:.) hunk ./XMonad.hs 103 +data Empty +data NonEmpty + +data List x y where + Nil :: List Empty x + Cons :: x -> List y x -> List NonEmpty x + +toList :: List t a -> [a] +toList Nil = [] +toList (Cons x y) = x : toList y + +infixr 5 .:. +(.:.) :: x -> List t x -> List NonEmpty x +(.:.) = Cons + } Context: [refactoring, style, comments on new layout code Don Stewart <dons@cse.unsw.edu.au>**20070504023618] [use anyKey constant instead of magic number Jason Creighton <jcreigh@gmail.com>**20070504015043] [added mirrorLayout to mirror arbitrary layouts Jason Creighton <jcreigh@gmail.com>**20070504014653] [Fix layout switching order Spencer Janssen <sjanssen@cse.unl.edu>**20070503235632] [More Config.hs bugs Spencer Janssen <sjanssen@cse.unl.edu>**20070503234607] [Revert accidental change to Config.hs Spencer Janssen <sjanssen@cse.unl.edu>**20070503233148] [Add -fglasgow-exts for pattern guards. Properties.hs doesn't complain anymore Spencer Janssen <sjanssen@cse.unl.edu>**20070503214221] [Avoid the unsafe pattern match, in case Config.hs has no layouts Spencer Janssen <sjanssen@cse.unl.edu>**20070503214007] [add support for extensible layouts. David Roundy <droundy@darcs.net>**20070503144750] [comments. and stop tracing events to stderr Don Stewart <dons@cse.unsw.edu.au>**20070503075821] [-Wall police Don Stewart <dons@cse.unsw.edu.au>**20070503074937] [elaborate documentation in Config.hs Don Stewart <dons@cse.unsw.edu.au>**20070503074843] [Use updated refreshKeyboardMapping. Requires latest X11-extras Spencer Janssen <sjanssen@cse.unl.edu>**20070503032040] [run QC tests in addition to LOC test Jason Creighton <jcreigh@gmail.com>**20070503003202] [Add 'mod-n': refreshes current layout Spencer Janssen <sjanssen@cse.unl.edu>**20070503002252] [Fix tests after StackSet changes Spencer Janssen <sjanssen@cse.unl.edu>**20070502201622] [First steps to adding floating layer Spencer Janssen <sjanssen@cse.unl.edu>**20070502195917] [update motivational text using xmonad.org Don Stewart <dons@cse.unsw.edu.au>**20070502061859] [Sort dependencies in installation order Spencer Janssen <sjanssen@cse.unl.edu>**20070501204249] [Recommend X11-extras 0.1 Spencer Janssen <sjanssen@cse.unl.edu>**20070501204121] [elaborate description in .cabal Don Stewart <dons@cse.unsw.edu.au>**20070501035414] [use -fasm by default. Much faster Don Stewart <dons@cse.unsw.edu.au>**20070501031220] [Make border width configurable Spencer Janssen <sjanssen@cse.unl.edu>**20070430163515] [Add Config.hs-boot, remove defaultLayoutDesc from XConf Spencer Janssen <sjanssen@cse.unl.edu>**20070430162647] [Comment only Spencer Janssen <sjanssen@cse.unl.edu>**20070430161635] [Comment only Spencer Janssen <sjanssen@cse.unl.edu>**20070430161511] [check we never generate invalid stack sets Don Stewart <dons@cse.unsw.edu.au>**20070430065946] [view n . shift n . view i . shift i) x == x --> shift + view is invertible Don Stewart <dons@cse.unsw.edu.au>**20070430062901] [add rotate all and view idempotency tests Don Stewart <dons@cse.unsw.edu.au>**20070430055751] [Add XConf for values that don't change. Spencer Janssen <sjanssen@cse.unl.edu>**20070430054715] [Control.Arrow is suspicious, add an explicit import Spencer Janssen <sjanssen@cse.unl.edu>**20070430053623] [push is idempotent Don Stewart <dons@cse.unsw.edu.au>**20070430054345] [add two properties relating to empty window managers Don Stewart <dons@cse.unsw.edu.au>**20070430051016] [configurable border colors Jason Creighton <jcreigh@gmail.com>**20070430043859 This also fixes a bug where xmonad was assuming a 24-bit display, and just using, eg, 0xff0000 as an index into a colormap without querying the X server to determine the proper pixel value for "red". ] [new QC property: opening a window only affects the current screen Don Stewart <dons@cse.unsw.edu.au>**20070430050133] [a bit more precise about building non-empty stacksets for one test Don Stewart <dons@cse.unsw.edu.au>**20070430035729] [remove redundant call to 'delete' in 'shift' Don Stewart <dons@cse.unsw.edu.au>**20070430031151] [clean 'delete' a little Don Stewart <dons@cse.unsw.edu.au>**20070430025319] [shrink 'swap' Don Stewart <dons@cse.unsw.edu.au>**20070430024813] [shrink 'rotate' a little Don Stewart <dons@cse.unsw.edu.au>**20070430024525] [move size into Properties.hs Don Stewart <dons@cse.unsw.edu.au>**20070430021758] [don't need 'size' operation on StackSet Don Stewart <dons@cse.unsw.edu.au>**20070430015927] [avoid grabbing all keys when a keysym is undefined Jason Creighton <jcreigh@gmail.com>**20070428180046 XKeysymToKeycode() returns zero if the keysym is undefined. Zero also happens to be the value of AnyKey. ] [add homepage: field to .cabal file Don Stewart <dons@cse.unsw.edu.au>**20070429041011] [add fromList to Properties.hs Don Stewart <dons@cse.unsw.edu.au>**20070429035823] [move fromList into Properties.hs, -17 loc Don Stewart <dons@cse.unsw.edu.au>**20070429035804] [Further refactoring Spencer Janssen <sjanssen@cse.unl.edu>**20070426212257] [Refactor in Config.hs (no real changes) Spencer Janssen <sjanssen@cse.unl.edu>**20070426211407] [Add the manpage to extra-source-files Spencer Janssen <sjanssen@cse.unl.edu>**20070426014105] [add xmonad manpage David Lazar <davidlazar@styso.com>**20070426010812] [Remove toList Spencer Janssen <sjanssen@cse.unl.edu>**20070426005713] [Ignore numlock and capslock in keybindings Jason Creighton <jcreigh@gmail.com>**20070424013357] [Clear numlock bit Spencer Janssen <sjanssen@cse.unl.edu>**20070424010352] [force window border to 1px Jason Creighton <jcreigh@gmail.com>**20070423050824] [s/creigh// Don Stewart <dons@cse.unsw.edu.au>**20070423024026] [some other things to do Don Stewart <dons@cse.unsw.edu.au>**20070423023151] [Start TODOs for 0.2 Spencer Janssen <sjanssen@cse.unl.edu>**20070423021526] [update readme Don Stewart <dons@cse.unsw.edu.au>**20070422090507] [TAG 0.1 Spencer Janssen <sjanssen@cse.unl.edu>**20070422083033] Patch bundle hash: 5e766922308da95a360e50a2a978e76215434b6e