module Test where import Prelude hiding ((.)) import Control.Category import Text.MPretty import qualified Data.Text.Lazy.IO as T import qualified Data.Set as Set import Data.Set (Set) import qualified Data.Map as Map import Data.Map (Map) import Util.Lens import Data.Lens import Control.Monad.Reader import Util.HasLens e1 :: [[Map String [Integer]]] e1 = [ [ Map.fromList [ ("foo", [1111,1112,1113,1114]) , ("bar", [2222,2223,2224]) , ("baz", [3333,3334]) ] , Map.empty , Map.fromList [ ("foo", [4444,4443,4442,4441]) , ("bar", [5555,5554,5553,5552,5551]) ] ] , [ Map.empty , Map.fromList [ ("foo", [6666,6667,6668,6669]) , ("bar", [7777,7778,7779]) ] ] , [] , [ Map.fromList [ ("foo", [8888,8889]) , ("bar", [9999]) , ("baz", []) ] , Map.empty ] ] data Exp = Var String | App Exp Exp | Dollar Exp Exp | Compose Exp Exp | Plus Exp Exp | Minus Exp Exp instance IsPretty Exp where pretty (Var x) = text $ pString x pretty (App e1 e2) = infixOp LeftD 10 NoBuffer (text $ pString " ") (pretty e1) (pretty e2) pretty (Dollar e1 e2) = infixOp RightD 1 Buffer (text $ pString "$") (pretty e1) (pretty e2) pretty (Compose e1 e2) = infixOp RightD 9 Buffer (text $ pString ".") (pretty e1) (pretty e2) pretty (Plus e1 e2) = infixOp LeftD 5 Buffer (text $ pString "+") (pretty e1) (pretty e2) pretty (Minus e1 e2) = infixOp RightD 5 Buffer (text $ pString "-") (pretty e1) (pretty e2) e2 :: Exp e2 = Dollar (Var "x") $ Compose (Var "y") $ Dollar (App (App (Var "l") $ Var "z") $ Var "q") $ Var "m" e3 :: Exp e3 = Plus (Plus (Var "x") (Var "y")) (Plus (Var "z") (Var "a")) e4 :: Exp e4 = Minus (Minus (Var "x") (Var "y")) (Minus (Var "z") (Var "a")) e5 :: Exp e5 = Minus (Plus (Var "x") (Var "y")) (Plus (Var "z") (Var "a")) e6 :: Exp e6 = Plus (Minus (Var "x") (Var "y")) (Minus (Var "z") (Var "a")) main :: IO () main = do T.putStrLn $ execPretty $ styleVariants $ layoutWidth 5 $ pretty e1 T.putStrLn $ execPretty $ showStyle $ pretty e1 T.putStrLn $ execPretty $ group $ layoutWidth 5 $ pretty e2 T.putStrLn $ execPretty $ styleVariants $ layoutWidth 5 $ pretty e2 T.putStrLn $ execPretty $ pretty e3 T.putStrLn $ execPretty $ pretty e4 T.putStrLn $ execPretty $ pretty e5 T.putStrLn $ execPretty $ pretty e6