{-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE DeriveTraversable #-} module Descript.BasicInj.Data.Atom.Scope ( FSymbol (..) , codeFSym , undefinedFSym ) where import Descript.Lex.Data.Atom import Descript.Misc -- | A symbol with a file scope. data FSymbol an = FSymbol { fsymbolScope :: AbsScope , fsymbol :: Symbol an } deriving (Eq, Ord, Read, Show, Functor, Foldable, Traversable) instance Ann FSymbol where getAnn = getAnn . fsymbol instance EAnn FSymbol where FSymbol xScope xSym `eappend` FSymbol yScope ySym | xScope /= yScope = error "symbols' scopes not equal" | otherwise = FSymbol xScope $ xSym `eappend` ySym instance Printable FSymbol where aprint = aprint . fsymbol instance (Show an) => Summary (FSymbol an) where summary = pprintSummary -- | The record head for code blocks. codeFSym :: FSymbol () codeFSym = FSymbol { fsymbolScope = baseScope , fsymbol = codeSym } -- | A symbol for an undefined value - e.g. an unresolved implicit -- property. undefinedFSym :: FSymbol () undefinedFSym = FSymbol { fsymbolScope = undefinedScope , fsymbol = undefinedSym }