{-# language LambdaCase #-} {-# language TemplateHaskell, MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, DataKinds, KindSignatures #-} {-| Module : Language.Python.Validate.Indentation.Error Copyright : (C) CSIRO 2017-2019 License : BSD3 Maintainer : Isaac Elliott Stability : experimental Portability : non-portable -} module Language.Python.Validate.Indentation.Error ( IndentationError(..) , AsTabError(..) , AsIndentationError(..) ) where import Control.Lens.Prism (Prism', prism') import Language.Python.Internal.Lexer (AsTabError(..)) import Language.Python.Syntax.Whitespace data IndentationError a = IndentationTabError a | ExpectedGreaterThan [Indent] (Indents a) | ExpectedEqualTo [Indent] (Indents a) | EmptyContinuedLine a deriving (Eq, Show) class AsTabError s a => AsIndentationError s a | s -> a where _IndentationError :: Prism' s (IndentationError a) _ExpectedGreaterThan :: Prism' s ([Indent], Indents a) _ExpectedGreaterThan = _IndentationError._ExpectedGreaterThan _ExpectedEqualTo :: Prism' s ([Indent], Indents a) _ExpectedEqualTo = _IndentationError._ExpectedEqualTo _EmptyContinuedLine :: Prism' s a _EmptyContinuedLine = _IndentationError._EmptyContinuedLine instance AsTabError (IndentationError a) a where _TabError = prism' IndentationTabError (\case IndentationTabError a -> Just a _ -> Nothing) instance AsIndentationError (IndentationError a) a where _IndentationError = id _ExpectedGreaterThan = prism' (uncurry ExpectedGreaterThan) (\case ExpectedGreaterThan a b -> Just (a, b) _ -> Nothing) _ExpectedEqualTo = prism' (uncurry ExpectedEqualTo) (\case ExpectedEqualTo a b -> Just (a, b) _ -> Nothing) _EmptyContinuedLine = prism' EmptyContinuedLine (\case EmptyContinuedLine a -> Just a _ -> Nothing)