Created
May 2, 2016 18:17
-
-
Save aavogt/9951e0e7f62e1b94fecd79793c50f935 to your computer and use it in GitHub Desktop.
exceptional xmonad layout instances are rare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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