open import Level.NP
open import Data.Product.NP

open import Control.Protocol.Core
open import Control.Protocol.End

module Control.Protocol.Lift a {} where
    liftᴾ : Proto_   Proto_ (a  )
    liftᴾ end        = end
    liftᴾ (com io P) = com io λ m  liftᴾ (P (lower {= a} m))

    lift-proc : (P : Proto_ )   P    liftᴾ P 
    lift-proc end      end     = end
    lift-proc (send P) (m , p) = lift m , lift-proc (P m) p
    lift-proc (recv P) p       = λ { (lift m)  lift-proc (P m) (p m) }