module Fay.Compiler.Desugar.Types
( DesugarReader (..)
, Desugar
, runDesugar
) where
import Fay.Compiler.Prelude
import Fay.Types (CompileError (..))
import Control.Monad.Error
import Control.Monad.Reader
data DesugarReader l = DesugarReader
{ readerNameDepth :: Int
, readerNoInfo :: l
, readerTmpNamePrefix :: String
}
newtype Desugar l a = Desugar
{ unDesugar :: (ReaderT (DesugarReader l)
(ErrorT CompileError IO))
a
} deriving ( MonadReader (DesugarReader l)
, MonadError CompileError
, MonadIO
, Monad
, Functor
, Applicative
)
runDesugar :: String -> l -> Desugar l a -> IO (Either CompileError a)
runDesugar tmpNamePrefix emptyAnnotation m =
runErrorT (runReaderT (unDesugar m) (DesugarReader 0 emptyAnnotation tmpNamePrefix))