summaryrefslogtreecommitdiff
path: root/src/GF/Infra/PrintClass.hs
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-09-20 09:10:37 +0000
committeraarne <aarne@cs.chalmers.se>2007-09-20 09:10:37 +0000
commit3707eb45762932b22d96ad03163c46dd1ba9fd8d (patch)
treef18b766c2ca32a5f21c77a40929a170a7814dff5 /src/GF/Infra/PrintClass.hs
parentef389db5694a52eb9c171fe76b952f37216e4c09 (diff)
refactored FCFG parsing to fit in GFCC shell
Diffstat (limited to 'src/GF/Infra/PrintClass.hs')
-rw-r--r--src/GF/Infra/PrintClass.hs56
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