-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Purely Functional Lazy Interaction with the outer world -- -- This package implements a data structure and operations on it for -- making interactive program without using explicitly IO monads. Version -- 0.1.0: APIs are changed from before. @package oi @version 0.1.0 module Data.OI.Base -- | Datatype for intermediating interaction data OI a -- | Interaction type type :-> a b = OI a -> b -- | Drive interaction run :: (OI a -> b) -> IO b -- | Assign operator (=:) :: a -> OI a -> a -- | Dereference operator (??) :: OI a -> a -- | Decomposer for pair dePair :: OI (a, b) -> (OI a, OI b) -- | Decomposer for list deList :: OI [a] -> Maybe (OI a, OI [a]) -- | Decomposer for triple deTriple :: OI (a, b, c) -> (OI a, OI b, OI c) -- | Decomposer for 4-tuple deTuple4 :: OI (a, b, c, d) -> (OI a, OI b, OI c, OI d) -- | Decomposer for 5-tuple deTuple5 :: OI (a, b, c, d, e) -> (OI a, OI b, OI c, OI d, OI e) -- | Decomposer for 6-tuple deTuple6 :: OI (a, b, c, d, e, f) -> (OI a, OI b, OI c, OI d, OI e, OI f) -- | Decomposer for 7-tuple deTuple7 :: OI (a, b, c, d, e, f, g) -> (OI a, OI b, OI c, OI d, OI e, OI f, OI g) deLeft :: OI (Either a b) -> Either (OI a) (OI b) deRight :: OI (Either a b) -> Either (OI a) (OI b) data IOResult a Success :: a -> IOResult a Failure :: String -> IOResult a -- | Convert IO to interaction iooi :: IO a -> OI a -> a iooi' :: IO a -> OI (IOResult a) -> IOResult a -- | Forcing utilities forces :: [()] -> () force :: a -> () split :: a -> (a, ()) instance Show a => Show (IOResult a) instance Functor IOResult instance Comonad OI instance Extend OI instance Monad OI instance Functor OI module Data.OI.Combinator (|>) :: (a -> b) -> (b -> c) -> (a -> c) choice :: a -> a -> Bool -> a -- | Connect two interactions into an interaction (|:|) :: (a :-> c) -> (b :-> d) -> ((a, b) :-> (c, d)) (|>|) :: (a :-> (p, c)) -> (b :-> (p -> d)) -> ((a, b) :-> (c, d)) (|/|) :: (a :-> c) -> (c -> (b :-> d)) -> ((a, b) :-> d) (|><|) :: (a :-> (p -> (q, c))) -> (b :-> (q -> (p, d))) -> ((a, b) :-> (c, d)) -- | Iteration mapOI :: (a :-> b) -> ([a] :-> [b]) zipWithOI :: (a :-> (b -> c)) -> ([a] :-> ([b] -> [c])) zipWithOI' :: (a -> (b :-> c)) -> ([a] -> ([b] :-> [c])) -- | Conditional branching ifOI :: Bool -> (a :-> c) -> (b :-> c) -> (Either a b :-> c) choiceOI :: (a :-> c) -> (b :-> c) -> Bool -> (Either a b :-> c) -- | Sequencing seqsOI :: [a] :-> ([a :-> b] -> ()) seqsOI' :: [a :-> b] -> ([a] :-> ()) module Data.OI.IO openFile :: FilePath -> IOMode -> Handle :=> Handle hIsClosed :: Handle -> Bool :=> Bool hIsEOF :: Handle -> Bool :=> Bool hGetLine :: Handle -> String :=> String hClose :: Handle -> () :=> () hPutStrLn :: Handle -> String -> () :=> () isEOF :: Bool :=> Bool getLine :: String :=> String putStrLn :: String -> () :=> () module Data.OI.Resource data Resource a Resource :: () -> [IOResult a] -> Resource a release :: Resource a -> () stream :: Resource a -> [IOResult a] inFileResource :: FilePath -> IOResult (Resource String) :-> IOResult (Resource String) outFileResource :: FilePath -> [String] -> IOResult (Resource ()) :-> IOResult (Resource ()) mapR :: (a -> b) -> IOResult (Resource a) -> [b] mapR' :: (a -> b) -> Resource a -> [b] filterR :: (a -> Bool) -> IOResult (Resource a) -> [a] takeR :: Integral i => i -> IOResult (Resource a) -> [a] takeR' :: Integral i => i -> Resource a -> [a] takeWhileR :: (a -> Bool) -> IOResult (Resource a) -> [a] instance Show a => Show (Resource a) module Data.OI.System args :: [String] :-> [String] progName :: String :-> String environment :: [(String, String)] :-> [(String, String)] module Data.OI