{-# LANGUAGE DeriveDataTypeable #-} module Hcompta.LCC.Source where import Data.Data (Data(..)) import Data.Eq (Eq) import Data.List.NonEmpty (NonEmpty) import Data.Ord (Ord(..)) import Data.Typeable (Typeable) import Data.Word (Word) import System.IO (FilePath) import Text.Show (Show) import Language.Symantic hiding (Source(..)) import qualified Language.Symantic as Sym -- import Hcompta.LCC.Compta (Compta) -- * Type 'Source' -- | A 'Source' usable when using 'readCompta'. data SourceRead = SourceRead_Less | SourceRead_Span (Span SourcePath) {- | Source_AST_Term (AST_Term (Source inp ss) ({-Proxy (Compta (Source inp ss) ss) ':-} ss)) | Source_AST_Type (AST_Type (Source inp ss)) | Source_Kind (KindK (Source inp ss)) | Source_Type (TypeVT (Source inp ss)) | Source_Term -} deriving (Eq, Show) type instance Source_Input SourceRead = SourcePath instance Sym.Source SourceRead where noSource = SourceRead_Less instance SourceInj (Span SourcePath) SourceRead where sourceInj = SourceRead_Span {- type instance Source_Input (Source inp ss) = inp instance SourceInj SourcePath (Source inp ss) where sourceInj = Source_Path instance SourceInj (Span inp) (Source inp ss) where sourceInj = Source_Input instance SourceInj (AST_Term (Source inp ss) ({-Proxy (Compta (Source inp ss) ss) ':-} ss)) (Source inp ss) where sourceInj = Source_AST_Term instance SourceInj (AST_Type (Source inp ss)) (Source inp ss) where sourceInj = Source_AST_Type instance SourceInj (KindK (Source inp ss)) (Source inp ss) where sourceInj = Source_Kind instance SourceInj (TypeVT (Source inp ss)) (Source inp ss) where sourceInj = Source_Type -} -- * Type 'SourcePos' data SourcePos = SourcePos FilePath {-# UNPACK #-} !PosFile {-# UNPACK #-} !PosFile deriving (Data, Eq, Ord, Show, Typeable) initialPos :: FilePath -> SourcePos initialPos p = SourcePos p (PosFile 0) (PosFile 0) -- * Type 'SourcePath' type SourcePath = NonEmpty SourcePos -- ** Type 'PosFile' newtype PosFile = PosFile (Word) deriving (Data, Eq, Ord, Show, Typeable) -- ** Type 'SourceRange' data SourceRange = SourceRange SourcePos SourcePos deriving (Data, Eq, Ord, Show, Typeable)