module Hinit.Utils where import Data.Text (Text) import Data.Text.Prettyprint.Doc import Data.Text.Prettyprint.Doc.Render.Terminal import System.FilePath.Glob mkBulletList :: [Doc a] -> Doc a mkBulletList :: [Doc a] -> Doc a mkBulletList = [Doc a] -> Doc a forall ann. [Doc ann] -> Doc ann vsep ([Doc a] -> Doc a) -> ([Doc a] -> [Doc a]) -> [Doc a] -> Doc a forall b c a. (b -> c) -> (a -> b) -> a -> c . (Doc a -> Doc a) -> [Doc a] -> [Doc a] forall a b. (a -> b) -> [a] -> [b] map ((Doc a "•" Doc a -> Doc a -> Doc a forall ann. Doc ann -> Doc ann -> Doc ann <+>) (Doc a -> Doc a) -> (Doc a -> Doc a) -> Doc a -> Doc a forall b c a. (b -> c) -> (a -> b) -> a -> c . Int -> Doc a -> Doc a forall ann. Int -> Doc ann -> Doc ann nest Int 2) mkError :: Doc AnsiStyle -> Doc AnsiStyle mkError :: Doc AnsiStyle -> Doc AnsiStyle mkError Doc AnsiStyle doc = AnsiStyle -> Doc AnsiStyle -> Doc AnsiStyle forall ann. ann -> Doc ann -> Doc ann annotate (Color -> AnsiStyle color Color Red) Doc AnsiStyle "Error:" Doc AnsiStyle -> Doc AnsiStyle -> Doc AnsiStyle forall ann. Doc ann -> Doc ann -> Doc ann <+> Int -> Doc AnsiStyle -> Doc AnsiStyle forall ann. Int -> Doc ann -> Doc ann nest Int 2 Doc AnsiStyle doc readYesNo :: Text -> Maybe Bool readYesNo :: Text -> Maybe Bool readYesNo Text s = if | Text s Text -> Text -> Bool forall a. Eq a => a -> a -> Bool == Text "Y" Bool -> Bool -> Bool || Text s Text -> Text -> Bool forall a. Eq a => a -> a -> Bool == Text "y" Bool -> Bool -> Bool || Text s Text -> Text -> Bool forall a. Eq a => a -> a -> Bool == Text "Yes" Bool -> Bool -> Bool || Text s Text -> Text -> Bool forall a. Eq a => a -> a -> Bool == Text "yes" -> Bool -> Maybe Bool forall (f :: Type -> Type) a. Applicative f => a -> f a pure Bool True | Text s Text -> Text -> Bool forall a. Eq a => a -> a -> Bool == Text "N" Bool -> Bool -> Bool || Text s Text -> Text -> Bool forall a. Eq a => a -> a -> Bool == Text "n" Bool -> Bool -> Bool || Text s Text -> Text -> Bool forall a. Eq a => a -> a -> Bool == Text "No" Bool -> Bool -> Bool || Text s Text -> Text -> Bool forall a. Eq a => a -> a -> Bool == Text "no" -> Bool -> Maybe Bool forall (f :: Type -> Type) a. Applicative f => a -> f a pure Bool False | Bool otherwise -> Maybe Bool forall a. Maybe a Nothing newtype PrettyShow a = PrettyShow {PrettyShow a -> a unPrettyShow :: a} instance Pretty a => Show (PrettyShow a) where show :: PrettyShow a -> String show = Doc Any -> String forall a. Show a => a -> String show (Doc Any -> String) -> (PrettyShow a -> Doc Any) -> PrettyShow a -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> Doc Any forall a ann. Pretty a => a -> Doc ann pretty (a -> Doc Any) -> (PrettyShow a -> a) -> PrettyShow a -> Doc Any forall b c a. (b -> c) -> (a -> b) -> a -> c . PrettyShow a -> a forall a. PrettyShow a -> a unPrettyShow matches :: [Pattern] -> FilePath -> Bool matches :: [Pattern] -> String -> Bool matches [Pattern] ps String fp = [Bool] -> Bool forall (t :: Type -> Type). Foldable t => t Bool -> Bool or ([Bool] -> Bool) -> [Bool] -> Bool forall a b. (a -> b) -> a -> b $ (Pattern -> Bool) -> [Pattern] -> [Bool] forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b fmap (Pattern -> String -> Bool `match` String fp) [Pattern] ps whenJust :: Applicative m => Maybe a -> (a -> m ()) -> m () whenJust :: Maybe a -> (a -> m ()) -> m () whenJust Maybe a Nothing a -> m () _ = () -> m () forall (f :: Type -> Type) a. Applicative f => a -> f a pure () whenJust (Just a a) a -> m () k = a -> m () k a a