{-# language DataKinds, TypeOperators #-}
{-# language FlexibleContexts #-}
module Language.Python.Validate
( module Data.Validation
, module Language.Python.Validate.Error
, module Language.Python.Validate.Indentation
, module Language.Python.Validate.Scope
, module Language.Python.Validate.Syntax
, validateModuleAll
, validateStatementAll
, validateExprAll
, validateAll
)
where
import Data.List.NonEmpty (NonEmpty)
import Data.Validation
import Language.Python.Syntax
import Language.Python.Validate.Error
import Language.Python.Validate.Indentation
import Language.Python.Validate.Scope
import Language.Python.Validate.Syntax
validateModuleAll
:: ( AsIndentationError e a
, AsSyntaxError e a
, AsScopeError e a
)
=> Module '[] a
-> Validation (NonEmpty e) (Module '[Scope, Syntax, Indentation] a)
validateModuleAll =
validateAll validateModuleIndentation validateModuleSyntax validateModuleScope
validateStatementAll
:: ( AsIndentationError e a
, AsSyntaxError e a
, AsScopeError e a
)
=> Statement '[] a
-> Validation (NonEmpty e) (Statement '[Scope, Syntax, Indentation] a)
validateStatementAll =
validateAll validateStatementIndentation validateStatementSyntax validateStatementScope
validateExprAll
:: ( AsIndentationError e a
, AsSyntaxError e a
, AsScopeError e a
)
=> Expr '[] a
-> Validation (NonEmpty e) (Expr '[Scope, Syntax, Indentation] a)
validateExprAll =
validateAll validateExprIndentation validateExprSyntax validateExprScope
validateAll
:: ( AsIndentationError e a
, AsSyntaxError e a
, AsScopeError e a
)
=> (s '[] a -> ValidateIndentation e (s '[Indentation] a))
-> (s '[Indentation] a -> ValidateSyntax e (s '[Syntax, Indentation] a))
-> (s '[Syntax, Indentation] a -> ValidateScope a e (s '[Scope, Syntax, Indentation] a))
-> s '[] a
-> Validation (NonEmpty e) (s '[Scope, Syntax, Indentation] a)
validateAll vi vsyn vsco m =
runValidateIndentation (vi m) `bindValidation` \m' ->
runValidateSyntax (vsyn m') `bindValidation` \m'' ->
runValidateScope (vsco m'')