mulang-4.2.1: src/Language/Mulang/Analyzer/SampleParser.hs
module Language.Mulang.Analyzer.SampleParser (
parseSample) where
import Language.Mulang
import Language.Mulang.Parsers (EitherParser, maybeToEither)
import Language.Mulang.Parsers.Haskell
import Language.Mulang.Parsers.JavaScript (parseJavaScript)
import Language.Mulang.Parsers.Prolog (parseProlog)
import Language.Mulang.Parsers.Java (parseJava)
import Language.Mulang.Parsers.Python (parsePython)
import Language.Mulang.Analyzer.Analysis (Sample(..), Language(..))
import Language.Mulang.Builder (normalize, normalizeWith, NormalizationOptions)
parseSample :: Sample -> Either String Expression
parseSample (CodeSample language content) = (parserFor language) content
parseSample (MulangSample ast options) = Right . (normalizerFor options) $ ast
parserFor :: Language -> EitherParser
parserFor Haskell = parseHaskell
parserFor Java = parseJava
parserFor JavaScript = maybeToEither parseJavaScript
parserFor Prolog = parseProlog
parserFor Python = parsePython
normalizerFor :: (Maybe NormalizationOptions) -> (Expression -> Expression)
normalizerFor Nothing = normalize
normalizerFor (Just options) = normalizeWith options