{-# LANGUAGE TypeSynonymInstances, TemplateHaskell, QuasiQuotes, MultiParamTypeClasses, FlexibleInstances, DeriveDataTypeable, ScopedTypeVariables #-}
module Examples.Universal where
import Language.Pads.Padsc
import Language.Forest.Forestc
import Language.Pads.GenPretty
import Language.Forest.Graph
import Language.Forest.Infer
import Language.Forest.Pretty
import Data.Maybe
import System.IO.Unsafe (unsafePerformIO)
[forest| type Universal_d = Directory
{ ascii_files is [ f :: TextFile | f <- matches <|GL "*"|>, <| get_kind f_att == AsciiK |> ]
, binary_files is [ b :: BinaryFile | b <- matches <|GL "*"|>, <| get_kind b_att == BinaryK |> ]
, directories is [ d :: Universal_d | d <- matches <|GL "*"|>, <| get_kind d_att == DirectoryK |> ]
, symLinks is [ s :: SymLink | s <- matches <|GL "*"|>, <| isJust (get_symLink s_att) |> ]
} |]
mkPrettyInstance ''Universal_d
mkPrettyInstance ''Universal_d_md
universal_dir = "data/universal"
(universe_rep, universe_md) = unsafePerformIO $ universal_d_load universal_dir
universal_pretty = putStrLn (pretty 120 (universal_d_ppr universe_rep))
universalIO = mdToPDF universe_md "Universal.pdf"
decls = buildDesc universe_md
decls_pretty = putStrLn(pretty 80 ( ppr_decls decls))
simple_dir = "data/Simple"
(simple_rep, simple_md) = unsafePerformIO $ universal_d_load simple_dir
simple_decls = buildDesc simple_md
simple_pretty = putStrLn(pretty 80 ( ppr_decls simple_decls))
classof11_dir = "data/CS/classof11"
(classof11_rep, classof11_md) = unsafePerformIO $ universal_d_load classof11_dir
classof11_decls = buildDesc classof11_md
classof11_pretty = putStrLn(pretty 80 ( ppr_decls classof11_decls))
getDesc :: FilePath -> IO String
getDesc path = do
{ (rep,md) <- universal_d_load path
; let decls = buildDesc md
; return (pretty 80 (ppr_decls decls))
}