diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-09-20 09:10:37 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-09-20 09:10:37 +0000 |
| commit | 3707eb45762932b22d96ad03163c46dd1ba9fd8d (patch) | |
| tree | f18b766c2ca32a5f21c77a40929a170a7814dff5 /src/GF/Infra/PrintClass.hs | |
| parent | ef389db5694a52eb9c171fe76b952f37216e4c09 (diff) | |
refactored FCFG parsing to fit in GFCC shell
Diffstat (limited to 'src/GF/Infra/PrintClass.hs')
| -rw-r--r-- | src/GF/Infra/PrintClass.hs | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/GF/Infra/PrintClass.hs b/src/GF/Infra/PrintClass.hs new file mode 100644 index 000000000..93d7366b6 --- /dev/null +++ b/src/GF/Infra/PrintClass.hs @@ -0,0 +1,56 @@ +module GF.Infra.PrintClass where + +import Data.List (intersperse) +import GF.Data.Operations (Err(..)) + +class Print a where + prt :: a -> String + prtList :: [a] -> String + prtList as = "[" ++ prtSep "," as ++ "]" + +prtSep :: Print a => String -> [a] -> String +prtSep sep = concat . intersperse sep . map prt + +prtBefore :: Print a => String -> [a] -> String +prtBefore before = prtBeforeAfter before "" + +prtAfter :: Print a => String -> [a] -> String +prtAfter after = prtBeforeAfter "" after + +prtBeforeAfter :: Print a => String -> String -> [a] -> String +prtBeforeAfter before after as = concat [ before ++ prt a ++ after | a <- as ] + +prtPairList :: (Print a, Print b) => String -> String -> [(a,b)] -> String +prtPairList comma sep xys = prtSep sep [ prt x ++ comma ++ prt y | (x,y) <- xys ] +prIO :: Print a => a -> IO () +prIO = putStr . prt + +instance Print a => Print [a] where + prt = prtList + +instance (Print a, Print b) => Print (a, b) where + prt (a, b) = "(" ++ prt a ++ "," ++ prt b ++ ")" + +instance (Print a, Print b, Print c) => Print (a, b, c) where + prt (a, b, c) = "(" ++ prt a ++ "," ++ prt b ++ "," ++ prt c ++ ")" + +instance (Print a, Print b, Print c, Print d) => Print (a, b, c, d) where + prt (a, b, c, d) = "(" ++ prt a ++ "," ++ prt b ++ "," ++ prt c ++ "," ++ prt d ++ ")" + +instance Print Char where + prt = return + prtList = id + +instance Print Int where + prt = show + +instance Print Integer where + prt = show + +instance Print a => Print (Maybe a) where + prt (Just a) = prt a + prt Nothing = "Nothing" + +instance Print a => Print (Err a) where + prt (Ok a) = prt a + prt (Bad str) = str |
