module System.Shana.Utils where import Control.Arrow ((>>>), (<<<)) import Control.Category (Category) import System.Shana.Type import Prelude hiding ((-), (>), (<), (^)) -- base DSL {-# INLINE (.) #-} (.) :: a -> (a -> b) -> b a . f = f a infixl 9 . (>) :: (Category cat) => cat a b -> cat b c -> cat a c (>) = (>>>) infixl 8 > (<) :: (Category cat) => cat b c -> cat a b -> cat a c (<) = (<<<) infixr 8 < (^) :: (Functor f) => f a -> (a -> b) -> f b (^) = flip fmap infixl 8 ^ {-# INLINE (-) #-} (-) :: (a -> b) -> a -> b f - x = f x infixr 0 - (<|>) :: (a -> IO [b]) -> (b -> IO [c]) -> (a -> IO [c]) f <|> g = runShana - Shana f > Shana g infixl 5 <|> shana :: Shana String b -> IO [b] shana x = runShana x ""