descript-lang-0.2.0.0: src/Descript/BasicInj/Data/Atom/Scope.hs
{-# 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
}