Skip to content

Instantly share code, notes, and snippets.

@aavogt
Created May 2, 2016 18:17
Show Gist options
  • Select an option

  • Save aavogt/9951e0e7f62e1b94fecd79793c50f935 to your computer and use it in GitHub Desktop.

Select an option

Save aavogt/9951e0e7f62e1b94fecd79793c50f935 to your computer and use it in GitHub Desktop.
exceptional xmonad layout instances are rare
module Main where
import System.Process
import Data.Char
import Text.PrettyPrint
listModules :: String -> IO [String]
listModules pkgName =
-- remove empty lines (possible?) or the exposed-modules: heading
filter (\x -> not (null x) && isUpper (head x)) . words
<$> readProcess "ghc-pkg" [ "field", pkgName, "exposed-modules"] ""
mkMod :: [String] -- ^ module names
-> Doc
mkMod ms = text "{-# LANGUAGE TemplateHaskell #-}\nmodule Main where"
$$ vcat [ text "import qualified" <+> text m | m <- "XMonad":"IPPrint":"Language.Haskell.TH as TH":ms ]
$$ hang (text "main = do") 2 (vcat stmts)
where stmts = [text $ "putStrLn $(TH.reify ''XMonad.LayoutClass" ++
">>= \\ (TH.ClassI _ insts) -> TH.stringE (unlines [ TH.pprint i | i@(TH.InstanceD ctxt _ _) <- insts, not (null ctxt) ]))"]
main = do
contribs <- listModules "xmonad-contrib"
writeFile "tmp1.hs" (show (mkMod contribs))
system "runghc tmp1.hs"
{- these are instances of LayoutClass that have an instance body/constraints
(the part before the =>).
instance (XMonad.Layout.ZoomRow.EQF f_0 a_1,
GHC.Show.Show a_1,
GHC.Read.Read a_1,
GHC.Show.Show (f_0 a_1),
GHC.Read.Read (f_0 a_1)) => XMonad.Core.LayoutClass (XMonad.Layout.ZoomRow.ZoomRow f_0)
a_1
instance (XMonad.Core.LayoutClass lt_0 a_1,
XMonad.Core.LayoutClass lf_2
a_1) => XMonad.Core.LayoutClass (XMonad.Layout.ToggleLayouts.ToggleLayouts lt_0
lf_2)
a_1
instance (XMonad.Core.LayoutClass l1_0 a_1,
XMonad.Core.LayoutClass l2_2 a_1,
GHC.Show.Show a_1) => XMonad.Core.LayoutClass (XMonad.Layout.PerWorkspace.PerWorkspace l1_0
l2_2)
a_1
instance (XMonad.Core.LayoutClass l1_0 a_1,
XMonad.Core.LayoutClass l2_2 a_1,
GHC.Show.Show a_1) => XMonad.Core.LayoutClass (XMonad.Layout.PerScreen.PerScreen l1_0
l2_2)
a_1
instance (XMonad.Core.LayoutClass l1_0 a_1,
XMonad.Core.LayoutClass l2_2 a_1,
GHC.Show.Show a_1) => XMonad.Core.LayoutClass (XMonad.Layout.OnHost.OnHost l1_0
l2_2)
a_1
instance (Data.Typeable.Internal.Typeable a_0,
GHC.Show.Show ts_1,
XMonad.Layout.MultiToggle.HList ts_1 a_0,
XMonad.Core.LayoutClass l_2
a_0) => XMonad.Core.LayoutClass (XMonad.Layout.MultiToggle.MultiToggle ts_1
l_2)
a_0
instance (XMonad.Core.Message m_0,
XMonad.Core.LayoutClass l_1
w_2) => XMonad.Core.LayoutClass (XMonad.Layout.MessageControl.Ignore m_0
l_1)
w_2
instance (XMonad.Layout.LayoutModifier.LayoutModifier m_0 a_1,
XMonad.Core.LayoutClass l_2
a_1) => XMonad.Core.LayoutClass (XMonad.Layout.LayoutModifier.ModifiedLayout m_0
l_2)
a_1
instance (XMonad.Core.LayoutClass l1_0 a_1,
XMonad.Core.LayoutClass l2_2
a_1) => XMonad.Core.LayoutClass (XMonad.Layout.LayoutCombinators.NewSelect l1_0
l2_2)
a_1
instance (XMonad.Core.LayoutClass l1_0 w_1,
XMonad.Core.LayoutClass l2_2 w_1,
XMonad.Layout.LayoutBuilderP.Predicate p_3 w_1,
GHC.Show.Show w_1,
GHC.Read.Read w_1,
GHC.Classes.Eq w_1,
Data.Typeable.Internal.Typeable w_1,
GHC.Show.Show p_3) => XMonad.Core.LayoutClass (XMonad.Layout.LayoutBuilderP.LayoutP p_3
l1_0
l2_2)
w_1
instance (XMonad.Core.LayoutClass l1_0 a_1,
XMonad.Core.LayoutClass l2_2 a_1,
GHC.Read.Read a_1,
GHC.Show.Show a_1,
GHC.Classes.Eq a_1,
Data.Typeable.Internal.Typeable a_1) => XMonad.Core.LayoutClass (XMonad.Layout.LayoutBuilder.LayoutN l1_0
l2_2)
a_1
instance (XMonad.Core.LayoutClass l1_0 a_1,
XMonad.Core.LayoutClass l2_2
a_1) => XMonad.Core.LayoutClass (XMonad.Layout.IfMax.IfMax l1_0
l2_2)
a_1
instance XMonad.Core.LayoutClass l_0
a_1 => XMonad.Core.LayoutClass (XMonad.Layout.Groups.WithID l_0)
a_1
instance (XMonad.Core.LayoutClass l_0 Graphics.X11.Types.Window,
XMonad.Core.LayoutClass l2_1
(XMonad.Layout.Groups.Group l_0
Graphics.X11.Types.Window)) => XMonad.Core.LayoutClass (XMonad.Layout.Groups.Groups l_0
l2_1)
Graphics.X11.Types.Window
instance (XMonad.Core.LayoutClass l_0 (),
XMonad.Core.LayoutClass l1_1 Graphics.X11.Types.Window,
XMonad.Core.LayoutClass l2_2
Graphics.X11.Types.Window) => XMonad.Core.LayoutClass (XMonad.Layout.ComboP.CombineTwoP (l_0 ())
l1_1
l2_2)
Graphics.X11.Types.Window
instance (XMonad.Core.LayoutClass l_0 (),
XMonad.Core.LayoutClass l1_1 a_2,
XMonad.Core.LayoutClass l2_3 a_2,
GHC.Read.Read a_2,
GHC.Show.Show a_2,
GHC.Classes.Eq a_2,
Data.Typeable.Internal.Typeable a_2) => XMonad.Core.LayoutClass (XMonad.Layout.Combo.CombineTwo (l_0 ())
l1_1
l2_3)
a_2
-}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment