    {-# LANGUAGE TypeSynonymInstances, DeriveDataTypeable, MultiParamTypeClasses #-}

    -----------------------------------------------------------------------------
    -- |
    -- Module      :  XMonad.Layout.MultiToggle.Instances
    -- Copyright   :  (c) 2008  Brent Yorgey
    -- License     :  BSD-style (see LICENSE)
    --
    -- Maintainer  :  <byorgey@gmail.com>
    -- Stability   :  unstable
    -- Portability :  unportable
    --
    -- Some convenient common instances of the
    -- 'XMonad.Layout.MultiToggle.Transformer' class, for use with
    -- "XMonad.Layout.MultiToggle".

    module XMonad.Layout.MultiToggle.Instances (
      StdTransformers(..)
    ) where

    import XMonad.Layout.MultiToggle

    import XMonad
    import XMonad.Layout.NoBorders
    import XMonad.Layout.LayoutModifier

    data StdTransformers = FULL          -- ^ switch to Full layout
                         | NBFULL        -- ^ switch to Full with no borders
                         | MIRROR        -- ^ Mirror the current layout.
                         | NOBORDERS     -- ^ Remove borders.
                         | SMARTBORDERS  -- ^ Apply smart borders.
      deriving (Read, Show, Eq, Typeable)

    instance Transformer StdTransformers Window where
        transform FULL         x k = k Full (const x)
        transform NBFULL       x k = k (noBorders Full) (const x)
        transform MIRROR       x k = k (Mirror x) (\(Mirror x') -> x')
        transform NOBORDERS    x k = k (noBorders x) (\(ModifiedLayout _ x') -> x')
        transform SMARTBORDERS x k = k (smartBorders x) (\(ModifiedLayout _ x') -> x')