Elminate some errors about ".cabal"
[darcs-mirror-sem_syn.git] / Util.hs
1 module Util where 
2
3 import Text.PrettyPrint
4 import Data.List (group, sort)
5
6 class Ppr a where
7     ppr :: a -> Doc 
8     pprList :: [a] -> Doc 
9     pprList as = brackets (sep $ punctuate comma (map ppr as))
10
11 instance (Ppr Int) where 
12     ppr i = int i 
13
14 instance (Ppr Integer) where
15     ppr i = integer i 
16
17
18 instance (Ppr a, Ppr b) => Ppr (a,b) where
19     ppr (a,b) = parens (sep $ punctuate comma [ppr a, ppr b])
20
21 instance (Ppr a, Ppr b, Ppr c) => Ppr (a,b,c) where 
22     ppr (a,b,c) = parens (sep $ punctuate comma [ppr a, ppr b, ppr c])
23
24 instance Ppr a => Ppr [a] where
25     ppr as    = pprList as -- brackets (sep $ punctuate comma (map ppr as))
26
27 instance Ppr Char where
28     ppr c     = char c
29
30 instance (Ppr a, Ppr b) => Ppr (Either a b) where
31     ppr (Left a)  = text "Left"  <+> ppr a 
32     ppr (Right b) = text "Right" <+> ppr b
33
34 instance (Ppr a) => Ppr (Maybe a) where
35     ppr (Nothing) = text "Nothing"
36     ppr (Just a)  = text "Just" <+> ppr a 
37
38
39 {-# SPECIALIZE snub :: [Int] -> [Int] #-}
40 {-# SPECIALIZE snub :: [String] -> [String] #-}
41 snub :: Ord a => [a] -> [a]
42 snub = map head . group .  sort