module WebBits.Common
( PrettyPrintable(..)
, L.isPrefixOf
, SourcePos
, sourceName
) where
import Data.Map (Map)
import Data.Maybe (catMaybes)
import Data.Char (toLower)
import Control.Applicative
import qualified System.IO as IO
import Control.Monad.State.Strict
import Control.Monad.Identity
import qualified Data.List as L
import Data.Generics hiding (GT)
import qualified Data.Foldable as Foldable
import Data.Foldable (Foldable)
import qualified Data.Traversable as Traversable
import Data.Traversable (Traversable, traverse)
import qualified Text.PrettyPrint.HughesPJ as Pp
import Text.ParserCombinators.Parsec.Pos (SourcePos, initialPos, sourceName)
lowercase = map toLower
class PrettyPrintable a where
pp:: a -> Pp.Doc
instance PrettyPrintable a => PrettyPrintable (Maybe a) where
pp (Just a) = pp a
pp Nothing = Pp.empty
instance Typeable SourcePos where
typeOf _ =
mkTyConApp (mkTyCon "Text.ParserCombinators.Parsec.Pos.SourcePos") []
sourcePosDatatype = mkDataType "SourcePos" [sourcePosConstr1]
sourcePosConstr1 = mkConstr sourcePosDatatype "SourcePos" [] Prefix
instance Data SourcePos where
gfoldl k z pos = z pos
toConstr _ = sourcePosConstr1
gunfold = error "gunfold is not defined for SourcePos"
dataTypeOf = error "dataTypeOf is not defined for SourcePos"