packages feed

ruler-0.4.1.0: src/Common.chs

-------------------------------------------------------------------------
-- Common stuff
-------------------------------------------------------------------------

%%[1 hs module (Common)
%%]

%%[1 hs export (module Data.Maybe)
%%]

%%[1 hs export (module Data.Char)
%%]

%%[1 hs export (module UHC.Util.Nm)
%%]

%%[1 hs export (module UHC.Util.DependencyGraph)
%%]

%%[1 hs export (module UHC.Util.FPath)
%%]

%%[1 hs export (module AttrProps)
%%]

%%[1 hs export (module Scanner)
%%]

%%[1 hs export (rulesCmdPre, ExprIsRw(..), WrKind(..))
%%]

%%[1 hs export (strOverl, strOverVec, strUnd, strLhs, strLoc)
%%]

%%[1 hs export (nmOverl, nmOverVec, nmUnk, nmApp, nmWild, nmNone, nmList)
%%]

%%[1 hs export (nmEql, nmComma, nmOParen, nmCParen, nmLhs, nmAny, nmSp1)
%%]

%%[1 hs export (nmUniq, nmCmdBegChng, nmCmdEndChng, nmCmdBegSame, nmCmdEndSame)
%%]

%%[1 hs export (nmFunMkUniq, nmIsOver, FmKind(..), fmAS2Fm, ScKind(..), ScDeriv(..))
%%]

%%[1 hs import (Data.Maybe, Data.Char, System.IO, UHC.Util.Pretty)
%%]

%%[1 hs import (Scanner( SPos, emptySPos ), UHC.Util.FPath)
%%]

%%[1 hs import (UHC.Util.ParseErrPrettyPrint, UHC.Util.ScanUtils, UHC.Util.Nm)
%%]

%%[1 hs import (UHC.Util.DependencyGraph, AttrProps)
%%]

%%[1 hs

-------------------------------------------------------------------------
-- Defaults
-------------------------------------------------------------------------

rulesCmdPre = "rules"

-------------------------------------------------------------------------
-- Is Expr a complex (non variable expr)?
-------------------------------------------------------------------------

data ExprIsRw
  = ExprIsRw    Nm
  | ExprIsVar   Nm
  | ExprIsOther
  deriving Show

instance PP ExprIsRw where
  pp = pp . show

-------------------------------------------------------------------------
-- PP instances
-------------------------------------------------------------------------

{-
instance (PP a,PP b) => PP (a,b) where
  pp (a,b) = pp a >#< ":" >#< pp b
-}

-------------------------------------------------------------------------
-- Kind of Expr wrappers (for influencing latex pretty printing, colors)
-------------------------------------------------------------------------

data WrKind
  = WrIsChanged | WrIsSame | WrTop | WrNone
  deriving (Show,Eq,Ord)

instance PP WrKind where
  pp = text . show

-------------------------------------------------------------------------
-- Names
-------------------------------------------------------------------------

strUnd      = "_"
strOverl    = "_"
strOverVec  = ">"
strLhs      = "lhs"
strLoc      = "loc"

nmOverl, nmOverVec, nmUnk, nmApp, nmWild, nmNone, nmEql, nmComma, nmOParen, nmCParen, nmLhs, nmAny, nmSp1 :: Nm
nmOverl   = Nm strOverl
nmOverVec = Nm strOverVec
nmLhs     = Nm strLhs
nmWild    = Nm strUnd
nmUnk     = Nm "??"
nmAny     = Nm "*"
nmSp1     = Nm "^"
nmEql     = Nm "="
nmApp     = Nm "$"
nmNone    = Nm ""
nmList    = Nm "[]"
nmComma   = Nm ","
nmOParen  = Nm "("
nmCParen  = Nm ")"

nmUniq :: Int -> Nm
nmUniq u  = Nm ("uniq" ++ (if u > 0 then show u else ""))

nmCmdBegChng, nmCmdEndChng, nmCmdBegSame, nmCmdEndSame :: Nm
nmCmdBegChng = Nm "rulerChngBegMark"
nmCmdEndChng = Nm "rulerChngEndMark"
nmCmdBegSame = Nm "rulerSameBegMark"
nmCmdEndSame = Nm "rulerSameEndMark"

nmFunMkUniq :: Int -> Nm
nmFunMkUniq u = Nm ("rulerMk" ++ show u ++ "Uniq")

nmIsOver :: Nm -> Bool
nmIsOver n = nmOverl == n || nmOverVec == n

-------------------------------------------------------------------------
-- Format kinds
-------------------------------------------------------------------------

data FmKind
  = FmTeX | FmFmtCmd | FmAG | FmHS | FmSpec | FmAll | FmCnstr | FmAS2 FmKind
  deriving (Show,Eq,Ord)

fmAS2Fm :: FmKind -> FmKind
fmAS2Fm (FmAS2 f) = f
fmAS2Fm f         = f

instance PP FmKind where
  pp = pp . show

-------------------------------------------------------------------------
-- Kind of scheme
-------------------------------------------------------------------------

data ScKind
  = ScJudge | ScRelation
  deriving (Show,Eq,Ord)

instance PP ScKind where
  pp = text . show

-------------------------------------------------------------------------
-- Derived scheme
-------------------------------------------------------------------------

data ScDeriv
  = ScList Nm
  deriving (Show,Eq,Ord)

instance PP ScDeriv where
  pp (ScList n) = ppBrackets (pp n)

%%]