module HIndent.Ast.Declaration.Signature.BooleanFormula ( BooleanFormula , mkBooleanFormula ) where import qualified GHC.Data.BooleanFormula as GHC import HIndent.Ast.Name.Prefix import HIndent.Ast.NodeComments import HIndent.Ast.WithComments import qualified HIndent.GhcLibParserWrapper.GHC.Hs as GHC import {-# SOURCE #-} HIndent.Pretty import HIndent.Pretty.Combinators import HIndent.Pretty.NodeComments data BooleanFormula = Var (WithComments PrefixName) | And [WithComments BooleanFormula] | Or [WithComments BooleanFormula] | Parens (WithComments BooleanFormula) instance CommentExtraction BooleanFormula where nodeComments :: BooleanFormula -> NodeComments nodeComments Var {} = [LEpaComment] -> [LEpaComment] -> [LEpaComment] -> NodeComments NodeComments [] [] [] nodeComments And {} = [LEpaComment] -> [LEpaComment] -> [LEpaComment] -> NodeComments NodeComments [] [] [] nodeComments Or {} = [LEpaComment] -> [LEpaComment] -> [LEpaComment] -> NodeComments NodeComments [] [] [] nodeComments Parens {} = [LEpaComment] -> [LEpaComment] -> [LEpaComment] -> NodeComments NodeComments [] [] [] instance Pretty BooleanFormula where pretty' :: BooleanFormula -> Printer () pretty' (Var WithComments PrefixName x) = WithComments PrefixName -> Printer () forall a. Pretty a => a -> Printer () pretty WithComments PrefixName x pretty' (And [WithComments BooleanFormula] xs) = [Printer ()] -> Printer () hvCommaSep ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer () forall a b. (a -> b) -> a -> b $ (WithComments BooleanFormula -> Printer ()) -> [WithComments BooleanFormula] -> [Printer ()] forall a b. (a -> b) -> [a] -> [b] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap WithComments BooleanFormula -> Printer () forall a. Pretty a => a -> Printer () pretty [WithComments BooleanFormula] xs pretty' (Or [WithComments BooleanFormula] xs) = [Printer ()] -> Printer () hvBarSep ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer () forall a b. (a -> b) -> a -> b $ (WithComments BooleanFormula -> Printer ()) -> [WithComments BooleanFormula] -> [Printer ()] forall a b. (a -> b) -> [a] -> [b] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap WithComments BooleanFormula -> Printer () forall a. Pretty a => a -> Printer () pretty [WithComments BooleanFormula] xs pretty' (Parens WithComments BooleanFormula x) = Printer () -> Printer () forall a. Printer a -> Printer a parens (Printer () -> Printer ()) -> Printer () -> Printer () forall a b. (a -> b) -> a -> b $ WithComments BooleanFormula -> Printer () forall a. Pretty a => a -> Printer () pretty WithComments BooleanFormula x mkBooleanFormula :: GHC.BooleanFormula (GHC.LIdP GHC.GhcPs) -> BooleanFormula mkBooleanFormula :: BooleanFormula (LIdP GhcPs) -> BooleanFormula mkBooleanFormula (GHC.Var LIdP GhcPs x) = WithComments PrefixName -> BooleanFormula Var (WithComments PrefixName -> BooleanFormula) -> WithComments PrefixName -> BooleanFormula forall a b. (a -> b) -> a -> b $ GenLocated SrcSpanAnnN PrefixName -> WithComments PrefixName forall l a. CommentExtraction l => GenLocated l a -> WithComments a fromGenLocated (GenLocated SrcSpanAnnN PrefixName -> WithComments PrefixName) -> GenLocated SrcSpanAnnN PrefixName -> WithComments PrefixName forall a b. (a -> b) -> a -> b $ (RdrName -> PrefixName) -> GenLocated SrcSpanAnnN RdrName -> GenLocated SrcSpanAnnN PrefixName forall a b. (a -> b) -> GenLocated SrcSpanAnnN a -> GenLocated SrcSpanAnnN b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap RdrName -> PrefixName mkPrefixName LIdP GhcPs GenLocated SrcSpanAnnN RdrName x mkBooleanFormula (GHC.And [LBooleanFormula (LIdP GhcPs)] xs) = [WithComments BooleanFormula] -> BooleanFormula And ([WithComments BooleanFormula] -> BooleanFormula) -> [WithComments BooleanFormula] -> BooleanFormula forall a b. (a -> b) -> a -> b $ (GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments BooleanFormula) -> [GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName))] -> [WithComments BooleanFormula] forall a b. (a -> b) -> [a] -> [b] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap ((BooleanFormula (GenLocated SrcSpanAnnN RdrName) -> BooleanFormula) -> WithComments (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments BooleanFormula forall a b. (a -> b) -> WithComments a -> WithComments b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap BooleanFormula (LIdP GhcPs) -> BooleanFormula BooleanFormula (GenLocated SrcSpanAnnN RdrName) -> BooleanFormula mkBooleanFormula (WithComments (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments BooleanFormula) -> (GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments (BooleanFormula (GenLocated SrcSpanAnnN RdrName))) -> GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments BooleanFormula forall b c a. (b -> c) -> (a -> b) -> a -> c . GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) forall l a. CommentExtraction l => GenLocated l a -> WithComments a fromGenLocated) [LBooleanFormula (LIdP GhcPs)] [GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName))] xs mkBooleanFormula (GHC.Or [LBooleanFormula (LIdP GhcPs)] xs) = [WithComments BooleanFormula] -> BooleanFormula Or ([WithComments BooleanFormula] -> BooleanFormula) -> [WithComments BooleanFormula] -> BooleanFormula forall a b. (a -> b) -> a -> b $ (GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments BooleanFormula) -> [GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName))] -> [WithComments BooleanFormula] forall a b. (a -> b) -> [a] -> [b] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap ((BooleanFormula (GenLocated SrcSpanAnnN RdrName) -> BooleanFormula) -> WithComments (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments BooleanFormula forall a b. (a -> b) -> WithComments a -> WithComments b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap BooleanFormula (LIdP GhcPs) -> BooleanFormula BooleanFormula (GenLocated SrcSpanAnnN RdrName) -> BooleanFormula mkBooleanFormula (WithComments (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments BooleanFormula) -> (GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments (BooleanFormula (GenLocated SrcSpanAnnN RdrName))) -> GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments BooleanFormula forall b c a. (b -> c) -> (a -> b) -> a -> c . GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) forall l a. CommentExtraction l => GenLocated l a -> WithComments a fromGenLocated) [LBooleanFormula (LIdP GhcPs)] [GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName))] xs mkBooleanFormula (GHC.Parens LBooleanFormula (LIdP GhcPs) x) = WithComments BooleanFormula -> BooleanFormula Parens (WithComments BooleanFormula -> BooleanFormula) -> WithComments BooleanFormula -> BooleanFormula forall a b. (a -> b) -> a -> b $ BooleanFormula (LIdP GhcPs) -> BooleanFormula BooleanFormula (GenLocated SrcSpanAnnN RdrName) -> BooleanFormula mkBooleanFormula (BooleanFormula (GenLocated SrcSpanAnnN RdrName) -> BooleanFormula) -> WithComments (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments BooleanFormula forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) -> WithComments (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) forall l a. CommentExtraction l => GenLocated l a -> WithComments a fromGenLocated LBooleanFormula (LIdP GhcPs) GenLocated SrcSpanAnnL (BooleanFormula (GenLocated SrcSpanAnnN RdrName)) x