{- | Definitions for the 'ToConst' protocol. Usable to pass constant values in circuits. -} module Protocols.ToConst ( ToConst, ToConstBwd, to, from, toBwd, fromBwd, ) where import Protocols.Plugin (Circuit (..), ToConst, ToConstBwd) -- | Convert a value to a t'Circuit' that produces a constant value on the forward channel. to :: a -> Circuit () (ToConst a) to a = Circuit (\_ -> ((), a)) -- | Extract the constant value from the forward direction. from :: Circuit () (ToConst a) -> a from (Circuit f) = snd (f ((), ())) {- | Convert a value to a t'Circuit' that produces a constant value in the backward direction. -} toBwd :: a -> Circuit (ToConstBwd a) () toBwd a = Circuit (\_ -> (a, ())) -- | Extract the constant value from the backward direction. fromBwd :: Circuit (ToConstBwd a) () -> a fromBwd (Circuit f) = fst (f ((), ()))