-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Library for purely functional lazy interactions with the outer world.
--
-- This package implements a data structure and operations on it for
-- writing interactive program with no imperative flavor of IO monads.
--
--
-- - N.B. At the moment, APIs maybe change.
--
@package oi
@version 0.4.0
-- | Author : Nobuo Yamashita Maintainer : nobsun@sampou.org Stability :
-- experimental
module Data.OI.Force
-- | forces
force :: a -> ()
-- | returns forcing invoker
force' :: a -> (a, ())
-- | forces sequence
forceSeq :: [a] -> ()
-- | Author : Nobuo Yamashita Maintainer : nobsun@sampou.org Stability :
-- experimental
module Data.OI.Internal
-- | Datatype for intermediating interaction: OI has two states
-- (programmer cannot distinguish), non-expressed and exressed.
-- `Non-expressed' indicates that no computation is assigned. In other
-- words, it's value is never denotated by any expression. So, if you
-- refer the value then the process will be suspended until other process
-- determins the value. Non-expressed value can be determined to become
-- expressed for a value by a expression at most once.
-- Expressed indicates that some computation is assigned for the
-- value. Once expressed, the value never be back to non-expressed nor be
-- changed.
data OI a
-- | Interaction (a function from a intermediating type to another type)
-- type
type (:->) a b = OI a -> b
-- | Dereference operator
(??) :: OI a -> a
-- | Reference operator
(##) :: a -> OI a
-- | Assign Operator
(=:) :: a -> 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)
-- | Drive interaction
runInteraction :: (OI a -> b) -> IO b
-- | IOResult for error handling
data IOResult a
Success :: a -> IOResult a
[result] :: IOResult a -> a
Failure :: String -> IOResult a
[errmsg] :: IOResult a -> String
-- | Convert IO to interaction
iooi :: IO a -> OI a -> a
iooi' :: IO a -> OI (IOResult a) -> IOResult a
instance GHC.Base.Functor Data.OI.Internal.OI
instance GHC.Base.Applicative Data.OI.Internal.OI
instance GHC.Base.Monad Data.OI.Internal.OI
instance Control.Comonad.Comonad Data.OI.Internal.OI
instance GHC.Show.Show a => GHC.Show.Show (Data.OI.Internal.IOResult a)
instance GHC.Base.Functor Data.OI.Internal.IOResult
-- | Author : Nobuo Yamashita Maintainer : nobsun@sampou.org Stability :
-- experimental
module Data.OI.Combinator
-- | 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))
sequenceOI :: [a :-> b] -> [a] :-> [b]
-- | Iteration
foldOI :: (a :-> (b -> b)) -> b -> ([a] :-> b)
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)
choiceOIOn :: (t -> a :-> c) -> (t -> b :-> c) -> (t -> Bool) -> t -> Either a b :-> c
-- | Sequencing
seqsOI :: [a :-> b] -> ([a] :-> ())
seqsOI' :: [a] :-> ([a :-> b] -> ())
-- | Author : Nobuo Yamashita Maintainer : nobsun@sampou.org Stability :
-- experimental
module Data.OI.IFun
type IFun p a b = a -> p :-> b
(|::|) :: IFun p a c -> IFun q b d -> IFun (p, q) (a, b) (c, d)
(|->|) :: IFun p a (b', c) -> IFun q (b', b) d -> IFun (p, q) (a, b) (c, d)
(|<>|) :: IFun p (a', a) (b', c) -> IFun q (b', b) (a', d) -> IFun (p, q) (a, b) (c, d)
-- | Author : Nobuo Yamashita Maintainer : nobsun@sampou.org Stability :
-- experimental
module Data.OI.IO
type (:~>) a b = OI (IOResult a) -> IOResult b
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 -> () :~> ()
-- | Author : Nobuo Yamashita Maintainer : nobsun@sampou.org Stability :
-- experimental
module Data.OI.Merge
mergeOI :: [a] -> [a] -> [a] :-> [a]
nmergeOI :: [[a]] -> [a] :-> [a]
-- | Author : Nobuo Yamashita Maintainer : nobsun@sampou.org Stability :
-- experimental
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]
filterR' :: (a -> Bool) -> 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]
takeWhileR' :: (a -> Bool) -> Resource a -> [a]
instance GHC.Show.Show a => GHC.Show.Show (Data.OI.Resource.Resource a)
-- | Author : Nobuo Yamashita Maintainer : nobsun@sampou.org Stability :
-- experimental
module Data.OI.System
args :: [String] :-> [String]
progName :: String :-> String
environment :: [(String, String)] :-> [(String, String)]
-- | Author : Nobuo Yamashita Maintainer : nobsun@sampou.org Stability :
-- experimental
module Data.OI