module SizedIO.IOObject where open import Data.Product open import Size open import SizedIO.Base open import SizedIO.Object -- An IO object is like a simple object, -- but the method returns IO applied to the result type of a simple object -- which means the method returns an IO program which when terminating -- returns the result of the simple object module _ (ioi : IOInterface) (let C = Command ioi) (let R = Response ioi) (oi : Interface) (let M = Method oi) (let Rt = Result oi) where record IOObject (i : Size) : Set where coinductive field method : ∀{j : Size< i} (m : M) → IO ioi ∞ (Rt m × IOObject j) open IOObject public