module HackMail.Control.Misc where
import Control.Arrow
import Data.Char
if' p t f = if p then t else f
instance Show (a -> b) where
show _ = "FUNCTION"
pairToList :: ([a],[a]) -> [a]
pairToList (a,b) = a++b
both :: Arrow a => a b c -> a (b, b) (c, c)
both a = a *** a
double :: Arrow a => a b c -> a b (c,c)
double a = a &&& a
(^|^) f g (x,y) = first (f x) >>> second (g y)
dupe f = f ^|^ f
(^&^) f g p i = (f ^|^ g) p $ (i, i)
copy f = f ^&^ f
appBoth :: (a -> b, c -> d) -> a -> c -> (b, d)
appBoth (f,g) x y = (f x, g y)
appDouble :: (a -> b, a -> b) -> a -> (b,b)
appDouble (f,g) x = (f x, g x)
maybeToBool :: Maybe a -> Bool
maybeToBool Nothing = False
maybeToBool _ = True
maybeAnd, maybeOr :: Maybe a -> Maybe a -> Maybe (a,a)
maybeIf :: Maybe a -> Maybe a -> Maybe a -> Maybe a
maybeAnd Nothing _ = Nothing
maybeAnd _ Nothing = Nothing
maybeAnd (Just a) (Just b) = Just (a,b)
maybeOr Nothing Nothing = Nothing
maybeOr Nothing (Just b) = Just (b,b)
maybeOr (Just a) Nothing = Just (a,a)
maybeOr (Just a) (Just b) = Just (a,b)
maybeIf Nothing Nothing _ = Nothing
maybeIf Nothing (Just a) _ = Just a
maybeIf (Just a) _ Nothing = Nothing
maybeIf (Just a) _ (Just b) = Just b