From 59172ce9c5baf593e3110036a14c910da80878f7 Mon Sep 17 00:00:00 2001 From: hallgren Date: Sun, 27 Jul 2014 22:13:13 +0000 Subject: Adding GF.Infra.Location and GF.Text.Pretty (forgot to 'darcs add' them before) --- src/compiler/GF/Infra/Location.hs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/compiler/GF/Infra/Location.hs (limited to 'src/compiler/GF/Infra') diff --git a/src/compiler/GF/Infra/Location.hs b/src/compiler/GF/Infra/Location.hs new file mode 100644 index 000000000..b38482ff9 --- /dev/null +++ b/src/compiler/GF/Infra/Location.hs @@ -0,0 +1,31 @@ +module GF.Infra.Location where +import GF.Text.Pretty + +class HasSourcePath a where sourcePath :: a -> FilePath + +data Location + = NoLoc + | Local Int Int + | External FilePath Location + deriving (Show,Eq,Ord) + +-- | Attaching location information +data L a = L Location a deriving Show + +instance Functor L where fmap f (L loc x) = L loc (f x) + +unLoc :: L a -> a +unLoc (L _ x) = x + +noLoc = L NoLoc + +ppLocation :: FilePath -> Location -> Doc +ppLocation fpath NoLoc = pp fpath +ppLocation fpath (External p l) = ppLocation p l +ppLocation fpath (Local b e) + | b == e = fpath <> ":" <> b + | otherwise = fpath <> ":" <> b <> "-" <> e + + +ppL (L loc x) msg = hang (ppLocation "" loc<>":") 4 + ("In"<+>x<>":"<+>msg) -- cgit v1.2.3