Safe Haskell | Safe-Infered |
---|
- data OI a
- type :-> a b = OI a -> b
- (??) :: OI a -> a
- dePair :: OI (a, b) -> (OI a, OI b)
- deList :: OI [a] -> Maybe (OI a, OI [a])
- deTriple :: OI (a, b, c) -> (OI a, OI b, OI c)
- deTuple4 :: OI (a, b, c, d) -> (OI a, OI b, OI c, OI d)
- deTuple5 :: OI (a, b, c, d, e) -> (OI a, OI b, OI c, OI d, OI e)
- deTuple6 :: OI (a, b, c, d, e, f) -> (OI a, OI b, OI c, OI d, OI e, OI f)
- 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)
- runInteraction :: (OI a -> b) -> IO b
- data IOResult a
- iooi :: IO a -> OI a -> a
- iooi' :: IO a -> OI (IOResult a) -> IOResult a
Types
Datatype for intermediating interaction:
OI
has two states, 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.
And expressed values are never changed.
type :-> a b = OI a -> bSource
Interaction (a function from a intermediating type to another type) type
Primitive operators on OI
Splitters against OI
datatype
deTuple6 :: OI (a, b, c, d, e, f) -> (OI a, OI b, OI c, OI d, OI e, OI f)Source
Decomposer for 6-tuple
deTuple7 :: OI (a, b, c, d, e, f, g) -> (OI a, OI b, OI c, OI d, OI e, OI f, OI g)Source
Decomposer for 7-tuple
Interaction driver
runInteraction :: (OI a -> b) -> IO bSource
Drive interaction
IO converters
IOResult
for error handling