tock-mirror/fco2/Metadata.hs
2007-03-13 15:37:55 +00:00

31 lines
860 B
Haskell

-- Metadata types
module Metadata where
import Data.Generics
import Data.List
type Meta = [Metadatum]
data Metadatum =
SourcePos String Int Int
deriving (Show, Eq, Typeable, Data)
findSourcePos :: Meta -> Maybe Metadatum
findSourcePos ms = find (\x -> case x of SourcePos _ _ _ -> True
otherwise -> False) ms
formatSourcePos :: Meta -> String
formatSourcePos m = case findSourcePos m of
Just (SourcePos f l c) -> "<@" ++ show l ++ ":" ++ show c ++ ">"
Nothing -> "<?>"
die :: Monad m => String -> m a
die s = error $ "error: " ++ s
dieP :: Monad m => Meta -> String -> m a
dieP m s = case findSourcePos m of
Just (SourcePos f l c) -> die $ f ++ ":" ++ (show l) ++ ":" ++ (show c) ++ ": " ++ s
Nothing -> die $ "unknown position: " ++ s