hindent-6.3.0: src/HIndent/Ast/Declaration/Bind/GuardedRhs.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RecordWildCards #-}
module HIndent.Ast.Declaration.Bind.GuardedRhs
( GuardedRhs
, mkGuardedRhs
, mkCaseGuardedRhs
, mkLambdaGuardedRhs
, mkMultiWayIfGuardedRhs
, mkCaseCmdGuardedRhs
, mkLambdaCmdGuardedRhs
) where
import HIndent.Applicative (whenJust)
import HIndent.Ast.Guard
( Guard
, mkCaseCmdGuard
, mkCaseExprGuard
, mkExprGuard
, mkLambdaCmdGuard
, mkLambdaExprGuard
, mkMultiWayIfExprGuard
)
import HIndent.Ast.LocalBinds (LocalBinds, mkLocalBinds)
import HIndent.Ast.NodeComments (NodeComments(..))
import HIndent.Ast.WithComments (WithComments, fromGenLocated, prettyWith)
import qualified HIndent.GhcLibParserWrapper.GHC.Hs as GHC
import {-# SOURCE #-} HIndent.Pretty
import HIndent.Pretty.Combinators
import HIndent.Pretty.NodeComments
data GuardedRhs = GuardedRhs
{ guards :: [WithComments Guard]
, localBinds :: Maybe (WithComments LocalBinds)
}
instance CommentExtraction GuardedRhs where
nodeComments _ = NodeComments [] [] []
instance Pretty GuardedRhs where
pretty' GuardedRhs {..} = do
mapM_ pretty guards
whenJust localBinds $ \lbs ->
indentedBlock
$ newlinePrefixed
[string "where", prettyWith lbs $ indentedBlock . pretty]
mkGuardedRhs :: GHC.GRHSs GHC.GhcPs (GHC.LHsExpr GHC.GhcPs) -> GuardedRhs
mkGuardedRhs GHC.GRHSs {..} =
GuardedRhs
{ guards = map (fmap mkExprGuard . fromGenLocated) grhssGRHSs
, localBinds = mkLocalBinds grhssLocalBinds
}
mkCaseGuardedRhs :: GHC.GRHSs GHC.GhcPs (GHC.LHsExpr GHC.GhcPs) -> GuardedRhs
mkCaseGuardedRhs GHC.GRHSs {..} =
GuardedRhs
{ guards = map (fmap mkCaseExprGuard . fromGenLocated) grhssGRHSs
, localBinds = mkLocalBinds grhssLocalBinds
}
mkLambdaGuardedRhs :: GHC.GRHSs GHC.GhcPs (GHC.LHsExpr GHC.GhcPs) -> GuardedRhs
mkLambdaGuardedRhs GHC.GRHSs {..} =
GuardedRhs
{ guards = map (fmap mkLambdaExprGuard . fromGenLocated) grhssGRHSs
, localBinds = mkLocalBinds grhssLocalBinds
}
mkMultiWayIfGuardedRhs ::
GHC.GRHSs GHC.GhcPs (GHC.LHsExpr GHC.GhcPs) -> GuardedRhs
mkMultiWayIfGuardedRhs GHC.GRHSs {..} =
GuardedRhs
{ guards = map (fmap mkMultiWayIfExprGuard . fromGenLocated) grhssGRHSs
, localBinds = mkLocalBinds grhssLocalBinds
}
mkCaseCmdGuardedRhs :: GHC.GRHSs GHC.GhcPs (GHC.LHsCmd GHC.GhcPs) -> GuardedRhs
mkCaseCmdGuardedRhs GHC.GRHSs {..} =
GuardedRhs
{ guards = map (fmap mkCaseCmdGuard . fromGenLocated) grhssGRHSs
, localBinds = mkLocalBinds grhssLocalBinds
}
mkLambdaCmdGuardedRhs ::
GHC.GRHSs GHC.GhcPs (GHC.LHsCmd GHC.GhcPs) -> GuardedRhs
mkLambdaCmdGuardedRhs GHC.GRHSs {..} =
GuardedRhs
{ guards = map (fmap mkLambdaCmdGuard . fromGenLocated) grhssGRHSs
, localBinds = mkLocalBinds grhssLocalBinds
}