module SizedIO.Object where

open import Data.Product

record Interface : Set₁ where
  field
    Method  : Set
    Result  : (m : Method)  Set
open Interface public

-- A simple object just returns for a method the response
-- and the object itself
record Object (i : Interface) : Set where
  coinductive
  field
    objectMethod : (m : Method i)  Result i m × Object i

open Object public


_▹_ : {A : Set}  {B : Set}  A  (A  B)  B
a  f = f a