packages feed

regexpr-0.1.5: Hidden/Tools.hs

--	Tools.hs
--
--	Author: Yoshikuni Jujo <PAF01143@nifty.ne.jp>
--

module Hidden.Tools (
  isSymbol
, modifyFst
, modifySnd
, first
, modifyFirst
, guardEqual
) where

import Control.Monad.State( StateT(StateT, runStateT), lift, MonadTrans )
import Data.Char          ( isAlphaNum, isSpace, isPrint )
import Control.Monad      ( MonadPlus, guard )

isSymbol :: Char -> Bool
isSymbol = (not . isAlphaNum) &&& (not . isSpace) &&& isPrint

(&&&) :: (a -> Bool) -> (a -> Bool) -> a -> Bool
(p1 &&& p2) x = p1 x && p2 x

modifyFst :: (a -> c) -> (a, b) -> (c, b)
modifyFst f (x, y) = (f x, y)
modifySnd :: (b -> c) -> (a, b) -> (a, c)
modifySnd f (x, y) = (x, f y)

guardEqual :: (MonadPlus m, Eq a) => m a -> m a -> m ()
guardEqual m1 m2 = do { x <- m1; y <- m2; guard (x == y) }

first :: (a,b,c) -> a
first (x,_,_) = x

modifyFirst :: (a -> d) -> (a, b, c) -> (d, b, c)
modifyFirst f (x, y, z) = (f x, y, z)