module Database.Ferry.Compiler.Transform (typedCoreToAlgebra) where
import Database.Ferry.Compiler.Pipeline (backEndPipeline')
import Database.Ferry.TypedCore.Data.TypedCore (CoreExpr)
import Database.Ferry.Compiler.Types
import Database.Ferry.Compiler.Error.Error
import Database.Ferry.Impossible
typedCoreToAlgebra :: CoreExpr -> String
typedCoreToAlgebra = compile defaultConfig
compile :: Config -> CoreExpr -> String
compile opts inp = do
let (r, _, f) = runPhase opts $ backEndPipeline' inp
case (r, f) of
(Right (), [(_, o)]) -> o
(Left ProcessComplete, [(_, o)]) -> o
(Left err, _) -> error $ show err
_ -> $impossible