- 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
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.
Interaction (a function from a intermediating type to another type) type
Primitive operators on OI
Decomposer for 6-tuple
Decomposer for 7-tuple
IOResult for error handling