-- | Stages used for displaying symbols.
module Language.Drasil.Stages(
   -- * Type
   Stage(..)
) where

-- FIXME: More fine-grained stages.
-- | Stages correspond to what we're trying to look up. They range from abstract
-- to concrete. Equational stages are more theoretical and oriented towards abstract design
-- while the Implementation stages are more oriented towards detailed design.                  
data Stage = Equational -- AKA Theoretical / Abstract-design
           | Implementation -- AKA Implementation / Detailed-design

{- Note: Keep stages separate from StagedSymbols for lookup purposes, as we may
   have documents which look up both stages of a symbol and show them 
   side-by-side or one after another. -}

-- | For better error messages.
instance Show Stage where
  show :: Stage -> String
show Equational     = "Theoretical stage"
  show Implementation = "Implementation Stage"