module Chiasma.Effect.Codec where import Chiasma.Data.CodecError (CodecError) import Chiasma.Data.TmuxCommand (TmuxCommand) import Chiasma.Data.TmuxRequest (TmuxRequest) import Chiasma.Data.TmuxResponse (TmuxResponse) data Codec (command :: Type -> Type) (i :: Type) (o :: Type) :: Effect where WithCodec :: command a -> (i -> m o) -> Codec command i o m a Encode :: command a -> Codec command i o m i makeSem ''Codec type NativeCodec command = Codec command TmuxRequest TmuxResponse type NativeCodecE command = NativeCodec command !! CodecError type NativeCommandCodec = NativeCodec TmuxCommand type NativeCommandCodecE = NativeCodecE TmuxCommand type family NativeCodecs (cs :: [Type -> Type]) :: [Effect] where NativeCodecs '[] = '[] NativeCodecs (c : cs) = NativeCodec c : NativeCodecs cs type family NativeCodecsE (cs :: [Type -> Type]) :: [Effect] where NativeCodecsE '[] = '[] NativeCodecsE (c : cs) = NativeCodecE c : NativeCodecsE cs