    -----------------------------------------------------------------------------
    -- |
    -- Module       : XMonad.Layout.LayoutCombinators
    -- Description :  Easily combine multiple layouts into one composite layout.
    -- Copyright    : (c) David Roundy <droundy@darcs.net>
    -- License      : BSD
    --
    -- Maintainer   : none
    -- Stability    : unstable
    -- Portability  : portable
    --
    -- The "XMonad.Layout.LayoutCombinators" module provides combinators
    -- for easily combining multiple layouts into one composite layout.
    -----------------------------------------------------------------------------

    module XMonad.Layout.LayoutCombinators
        ( -- * Usage
          -- $usage

          -- * Layout combinators
          -- $combine

          -- ** Combinators using DragPane vertical
          -- $dpv
          (*||*), (**||*),(***||*),(****||*),(***||**),(****||***)
        , (***||****),(*||****),(**||***),(*||***),(*||**)

          -- ** Combinators using DragPane horizontal
          -- $dph
        , (*//*), (**//*),(***//*),(****//*),(***//**),(****//***)
        , (***//****),(*//****),(**//***),(*//***),(*//**)

          -- ** Combinators using Tall (vertical)
          -- $tv
        , (*|*), (**|*),(***|*),(****|*),(***|**),(****|***)
        , (***|****),(*|****),(**|***),(*|***),(*|**)

          -- ** Combinators using Mirror Tall (horizontal)
          -- $mth
        , (*/*), (**/*),(***/*),(****/*),(***/**),(****/***)
        , (***/****),(*/****),(**/***),(*/***),(*/**)

          -- * Re-exports for backwards compatibility
        , (|||)
        , JumpToLayout(..)
        , NewSelect
        ) where

    import XMonad
    import XMonad.Layout.Combo
    import XMonad.Layout.DragPane

    -- $usage
    -- You can use this module with the following in your @xmonad.hs@:
    --
    -- > import XMonad.Layout.LayoutCombinators
    --
    -- Then edit your @layoutHook@ to use the new layout combinators. For
    -- example:
    --
    -- > myLayout = (Tall 1 (3/100) (1/2) *//* Full)  ||| (Tall 1 (3/100) (1/2) ***||** Full) ||| Full ||| etc..
    -- > main = xmonad def { layoutHook = myLayout }
    --
    -- For more detailed instructions on editing the @layoutHook@ see
    -- <https://xmonad.org/TUTORIAL.html#customizing-xmonad the tutorial> and
    -- "XMonad.Doc.Extending#Editing_the_layout_hook".
    --

    -- $combine
    -- Each of the following combinators combines two layouts into a
    -- single composite layout by splitting the screen into two regions,
    -- one governed by each layout.  Asterisks in the combinator names
    -- denote the relative amount of screen space given to the respective
    -- layouts.  For example, the '***||*' combinator gives three times as
    -- much space to the left-hand layout as to the right-hand layout.

    infixr 6 *||*, **||*, ***||*, ****||*, ***||**, ****||***, ***||****, *||****, **||***, *||***, *||**,
             *//*, **//*, ***//*, ****//*, ***//**, ****//***, ***//****, *//****, **//***, *//***, *//**,
             *|* , **|* , ***|* , ****|* , ***|** , ****|*** , ***|**** , *|**** , **|*** , *|*** , *|** ,
             */* , **/* , ***/* , ****/* , ***/** , ****/*** , ***/**** , */**** , **/*** , */*** , */**

    -- $dpv
    -- These combinators combine two layouts using "XMonad.Layout.DragPane" in
    -- vertical mode.

    (*||*),(**||*),(***||*),(****||*), (***||**),(****||***),
           (***||****),(*||****),(**||***),(*||***),(*||**) :: (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
              l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a

    *||* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (*||*)      = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Vertical Double
    0.1 (Double
    1Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    2))
    **||* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (**||*)     = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Vertical Double
    0.1 (Double
    2Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    3))
    ***||* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (***||*)    = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Vertical Double
    0.1 (Double
    3Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    4))
    ****||* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (****||*)   = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Vertical Double
    0.1 (Double
    4Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    5))
    ***||** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (***||**)   = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Vertical Double
    0.1 (Double
    3Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    5))
    ****||*** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (****||***) = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Vertical Double
    0.1 (Double
    4Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    7))
    ***||**** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (***||****) = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Vertical Double
    0.1 (Double
    3Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    7))
    *||**** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (*||****)   = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Vertical Double
    0.1 (Double
    1Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    5))
    **||*** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (**||***)   = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Vertical Double
    0.1 (Double
    2Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    5))
    *||*** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (*||***)    = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Vertical Double
    0.1 (Double
    1Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    4))
    *||** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (*||**)     = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Vertical Double
    0.1 (Double
    1Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    3))

    -- $dph
    -- These combinators combine two layouts using "XMonad.Layout.DragPane" in
    -- horizontal mode.

    (*//*),(**//*),(***//*),(****//*), (***//**),(****//***),
           (***//****),(*//****),(**//***),(*//***),(*//**) :: (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
              l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a

    *//* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (*//*)      = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Horizontal Double
    0.1 (Double
    1Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    2))
    **//* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (**//*)     = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Horizontal Double
    0.1 (Double
    2Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    3))
    ***//* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (***//*)    = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Horizontal Double
    0.1 (Double
    3Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    4))
    ****//* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (****//*)   = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Horizontal Double
    0.1 (Double
    4Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    5))
    ***//** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (***//**)   = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Horizontal Double
    0.1 (Double
    3Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    5))
    ****//*** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (****//***) = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Horizontal Double
    0.1 (Double
    4Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    7))
    ***//**** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (***//****) = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Horizontal Double
    0.1 (Double
    3Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    7))
    *//**** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (*//****)   = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Horizontal Double
    0.1 (Double
    1Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    5))
    **//*** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (**//***)   = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Horizontal Double
    0.1 (Double
    2Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    5))
    *//*** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (*//***)    = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Horizontal Double
    0.1 (Double
    1Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    4))
    *//** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    (*//**)     = DragPane () -> l1 a -> l2 a -> CombineTwo (DragPane ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (DragType -> Double -> Double -> DragPane ()
    forall a. DragType -> Double -> Double -> DragPane a
    dragPane DragType
    Horizontal Double
    0.1 (Double
    1Double -> Double -> Double
    forall a. Fractional a => a -> a -> a
    /Double
    3))

    -- $tv
    -- These combinators combine two layouts vertically using @Tall@.

    (*|*),(**|*),(***|*),(****|*), (***|**),(****|***),
           (***|****),(*|****),(**|***),(*|***),(*|**) :: (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a)
              => l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    *|* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    (*|*)      = Tall () -> l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    1Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    2))
    **|* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    (**|*)     = Tall () -> l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    2Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    3))
    ***|* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    (***|*)    = Tall () -> l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    3Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    4))
    ****|* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    (****|*)   = Tall () -> l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    4Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    5))
    ***|** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    (***|**)   = Tall () -> l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    3Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    5))
    ****|*** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    (****|***) = Tall () -> l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    4Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    7))
    ***|**** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    (***|****) = Tall () -> l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    3Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    7))
    *|**** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    (*|****)   = Tall () -> l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    1Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    5))
    **|*** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    (**|***)   = Tall () -> l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    2Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    5))
    *|*** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    (*|***)    = Tall () -> l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    1Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    4))
    *|** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    (*|**)     = Tall () -> l1 a -> l2 a -> CombineTwo (Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    1Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    3))

    -- $mth
    -- These combinators combine two layouts horizontally using @Mirror
    -- Tall@.

    (*/*),(**/*),(***/*),(****/*), (***/**),(****/***),
           (***/****),(*/****),(**/***),(*/***),(*/**) :: (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a)
              => l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    */* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    (*/*)      = Mirror Tall ()
    -> l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Tall () -> Mirror Tall ()
    forall (l :: * -> *) a. l a -> Mirror l a
    Mirror (Tall () -> Mirror Tall ()) -> Tall () -> Mirror Tall ()
    forall a b. (a -> b) -> a -> b
    $ Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    1Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    2))
    **/* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    (**/*)     = Mirror Tall ()
    -> l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Tall () -> Mirror Tall ()
    forall (l :: * -> *) a. l a -> Mirror l a
    Mirror (Tall () -> Mirror Tall ()) -> Tall () -> Mirror Tall ()
    forall a b. (a -> b) -> a -> b
    $ Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    2Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    3))
    ***/* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    (***/*)    = Mirror Tall ()
    -> l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Tall () -> Mirror Tall ()
    forall (l :: * -> *) a. l a -> Mirror l a
    Mirror (Tall () -> Mirror Tall ()) -> Tall () -> Mirror Tall ()
    forall a b. (a -> b) -> a -> b
    $ Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    3Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    4))
    ****/* :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    (****/*)   = Mirror Tall ()
    -> l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Tall () -> Mirror Tall ()
    forall (l :: * -> *) a. l a -> Mirror l a
    Mirror (Tall () -> Mirror Tall ()) -> Tall () -> Mirror Tall ()
    forall a b. (a -> b) -> a -> b
    $ Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    4Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    5))
    ***/** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    (***/**)   = Mirror Tall ()
    -> l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Tall () -> Mirror Tall ()
    forall (l :: * -> *) a. l a -> Mirror l a
    Mirror (Tall () -> Mirror Tall ()) -> Tall () -> Mirror Tall ()
    forall a b. (a -> b) -> a -> b
    $ Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    3Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    5))
    ****/*** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    (****/***) = Mirror Tall ()
    -> l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Tall () -> Mirror Tall ()
    forall (l :: * -> *) a. l a -> Mirror l a
    Mirror (Tall () -> Mirror Tall ()) -> Tall () -> Mirror Tall ()
    forall a b. (a -> b) -> a -> b
    $ Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    4Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    7))
    ***/**** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    (***/****) = Mirror Tall ()
    -> l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Tall () -> Mirror Tall ()
    forall (l :: * -> *) a. l a -> Mirror l a
    Mirror (Tall () -> Mirror Tall ()) -> Tall () -> Mirror Tall ()
    forall a b. (a -> b) -> a -> b
    $ Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    3Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    7))
    */**** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    (*/****)   = Mirror Tall ()
    -> l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Tall () -> Mirror Tall ()
    forall (l :: * -> *) a. l a -> Mirror l a
    Mirror (Tall () -> Mirror Tall ()) -> Tall () -> Mirror Tall ()
    forall a b. (a -> b) -> a -> b
    $ Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    1Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    5))
    **/*** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    (**/***)   = Mirror Tall ()
    -> l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Tall () -> Mirror Tall ()
    forall (l :: * -> *) a. l a -> Mirror l a
    Mirror (Tall () -> Mirror Tall ()) -> Tall () -> Mirror Tall ()
    forall a b. (a -> b) -> a -> b
    $ Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    2Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    5))
    */*** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    (*/***)    = Mirror Tall ()
    -> l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Tall () -> Mirror Tall ()
    forall (l :: * -> *) a. l a -> Mirror l a
    Mirror (Tall () -> Mirror Tall ()) -> Tall () -> Mirror Tall ()
    forall a b. (a -> b) -> a -> b
    $ Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    1Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    4))
    */** :: forall a (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass l1 a, LayoutClass l2 a) =>
    l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    (*/**)     = Mirror Tall ()
    -> l1 a -> l2 a -> CombineTwo (Mirror Tall ()) l1 l2 a
    forall a (super :: * -> *) (l1 :: * -> *) (l2 :: * -> *).
    (Read a, Eq a, LayoutClass super (), LayoutClass l1 a,
     LayoutClass l2 a) =>
    super () -> l1 a -> l2 a -> CombineTwo (super ()) l1 l2 a
    combineTwo (Tall () -> Mirror Tall ()
    forall (l :: * -> *) a. l a -> Mirror l a
    Mirror (Tall () -> Mirror Tall ()) -> Tall () -> Mirror Tall ()
    forall a b. (a -> b) -> a -> b
    $ Int -> Rational -> Rational -> Tall ()
    forall a. Int -> Rational -> Rational -> Tall a
    Tall Int
    1 Rational
    0.1 (Rational
    1Rational -> Rational -> Rational
    forall a. Fractional a => a -> a -> a
    /Rational
    3))

    type NewSelect = Choose
    {-# DEPRECATED NewSelect "Use 'Choose' instead." #-}