{-# LANGUAGE FlexibleContexts #-} module Jikka.CPlusPlus.Convert ( run, ) where import qualified Jikka.CPlusPlus.Convert.AddMain as AddMain import qualified Jikka.CPlusPlus.Convert.FromCore as FromCore import qualified Jikka.CPlusPlus.Convert.InlineSetAt as InlineSetAt import qualified Jikka.CPlusPlus.Convert.MoveSemantics as MoveSemantics import qualified Jikka.CPlusPlus.Convert.OptimizeRange as OptimizeRange import qualified Jikka.CPlusPlus.Convert.UnpackTuples as UnpackTuples import qualified Jikka.CPlusPlus.Convert.UseInitialization as UseInitialization import qualified Jikka.CPlusPlus.Language.Expr as Y import Jikka.Common.Alpha import Jikka.Common.Error import Jikka.Common.IOFormat import qualified Jikka.Core.Language.Expr as X run :: (MonadAlpha m, MonadError Error m) => X.Program -> Maybe IOFormat -> m Y.Program run :: Program -> Maybe IOFormat -> m Program run Program prog Maybe IOFormat format = do Program prog <- Program -> m Program forall (m :: * -> *). (MonadAlpha m, MonadError Error m) => Program -> m Program FromCore.run Program prog let go :: Program -> m Program go Program prog = do Program prog <- Program -> m Program forall (m :: * -> *). (MonadAlpha m, MonadError Error m) => Program -> m Program UnpackTuples.run Program prog Program prog <- Program -> m Program forall (m :: * -> *). MonadError Error m => Program -> m Program MoveSemantics.run Program prog Program -> m Program forall (m :: * -> *). (MonadAlpha m, MonadError Error m) => Program -> m Program OptimizeRange.run Program prog Program prog <- Program -> m Program forall (m :: * -> *). (MonadAlpha m, MonadError Error m) => Program -> m Program go Program prog Program prog <- Program -> m Program forall (m :: * -> *). (MonadAlpha m, MonadError Error m) => Program -> m Program go Program prog Program prog <- Program -> m Program forall (m :: * -> *). (MonadAlpha m, MonadError Error m) => Program -> m Program InlineSetAt.run Program prog Program prog <- Program -> m Program forall (m :: * -> *). (MonadAlpha m, MonadError Error m) => Program -> m Program go Program prog Program prog <- m Program -> (IOFormat -> m Program) -> Maybe IOFormat -> m Program forall b a. b -> (a -> b) -> Maybe a -> b maybe (Program -> m Program forall (m :: * -> *) a. Monad m => a -> m a return Program prog) (Program -> IOFormat -> m Program forall (m :: * -> *). (MonadAlpha m, MonadError Error m) => Program -> IOFormat -> m Program AddMain.run Program prog) Maybe IOFormat format Program -> m Program forall (m :: * -> *). (MonadAlpha m, MonadError Error m) => Program -> m Program UseInitialization.run Program prog