packages feed

cimple-0.0.2: src/Language/Cimple/Diagnostics.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StrictData        #-}
module Language.Cimple.Diagnostics
  ( Diagnostics
  , warn
  ) where

import           Control.Monad.State.Lazy (State)
import qualified Control.Monad.State.Lazy as State
import           Data.Text                (Text)
import qualified Data.Text                as Text
import           Language.Cimple.Lexer    (Lexeme (..), lexemeLine)

type Diagnostics a = State [Text] a

warn :: FilePath -> Lexeme Text -> Text -> Diagnostics ()
warn file l w = do
    diags <- State.get
    State.put $ diag : diags
  where
    diag = Text.pack file <> ":" <> Text.pack (show (lexemeLine l)) <> ": " <> w