{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Data.Bool.ToolsYj (onlyIf, errorIf, errorIfNot) where

import Data.Bool

onlyIf :: (a -> Bool) -> a -> Maybe a
onlyIf :: forall a. (a -> Bool) -> a -> Maybe a
onlyIf a -> Bool
p a
x = Maybe a -> Maybe a -> Bool -> Maybe a
forall a. a -> a -> Bool -> a
bool Maybe a
forall a. Maybe a
Nothing (a -> Maybe a
forall a. a -> Maybe a
Just a
x) (a -> Bool
p a
x)

errorIf :: String -> Bool -> IO ()
errorIf :: String -> Bool -> IO ()
errorIf String
msg = IO () -> IO () -> Bool -> IO ()
forall a. a -> a -> Bool -> a
bool (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()) (String -> IO ()
forall a. HasCallStack => String -> a
error String
msg)

errorIfNot :: String -> Bool -> IO ()
errorIfNot :: String -> Bool -> IO ()
errorIfNot String
msg = IO () -> IO () -> Bool -> IO ()
forall a. a -> a -> Bool -> a
bool (String -> IO ()
forall a. HasCallStack => String -> a
error String
msg) (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())