packages feed

pro-source-0.1.0.0: src/ProSource/Source.hs

{-# LANGUAGE StrictData #-}

{- |
Copyright: © 2019 James Alexander Feldman-Crough
License: MPL-2.0
-}
module ProSource.Source (Source (..)) where

import ProSource.LineMap

{- | Information about a source file.

The 'Show' instance for ths class does not include the 'LineMap' or 'Text' fields, as those are rather noisy.
-}
data Source = Source
  { sourceName :: String
    -- ^ The reported file-name of the 'Source'.
    --
    -- When read from file handles, a non-filepath description such as @"\<stdin\>"@ is typically chosen. This field doesn't have semantic meaning, and should only be used to enrich the output displayed to users.
  , sourceText :: Text
    -- ^ The full source, as 'Text'.
  , sourceLineMap :: LineMap
    -- ^ A mapping of the start position of each line in the 'Source'.
  }
  deriving stock (Eq, Generic)
  deriving anyclass (Hashable, NFData)

instance Show Source where
    show (Source fp _ _) = "Source " <> show fp

instance Pretty Source where
    pretty = pretty . sourceName