Current section
Files
Jump to
Current section
Files
src/prequel.gleam
import gleam/result
import non_empty_list
import prequel/ast.{Module}
import prequel/error/pipeline_error.{PipelineError}
import prequel/internals/checker
import prequel/internals/token
import prequel/internals/parser
/// Parses a string into a `Module`.
///
pub fn parse(source: String) -> Result(Module, PipelineError) {
let parse_result =
token.scan(source)
|> parser.parse
|> result.map_error(pipeline_error.ParsingFailure)
use module <- result.then(parse_result)
case checker.check_module(module) {
[] -> Ok(module)
[error, ..errors] ->
Error(pipeline_error.ValidationFailure(non_empty_list.new(error, errors)))
}
}