diff --git a/haskell/Pre.hs b/haskell/Pre.hs index 28ab845..380af82 100644 --- a/haskell/Pre.hs +++ b/haskell/Pre.hs @@ -39,6 +39,7 @@ module Pre ( module Text.Megaparsec.Char.Lexer, module Text.Pretty.Simple, Puzzle (..), + mwhen, (<<$>>), (<<&>>), takeUntil, @@ -146,6 +147,9 @@ data Puzzle = forall input outputs. (KnownNat (Length outputs), NFData input) => (<<&>>) :: (Functor f1, Functor f2) => f1 (f2 a) -> (a -> b) -> f1 (f2 b) (<<&>>) = flip (<<$>>) +mwhen :: (Monoid p) => Bool -> p -> p +mwhen b x = if b then x else mempty + takeUntil :: (Foldable t) => (a -> Bool) -> t a -> [a] takeUntil p = foldr (\x xs -> x : if p x then [] else xs) []