module Control.Monad.Free.ListedEffects where open import Prelude open import Container renaming (Container to Container′) open import Data.List Container : _ Container = Container′ private variable F G : Container Fs Gs : List Container Free : List Container → Type → Type Free = flip (foldr ⟦_⟧) extract : Free [] A → A extract x = x open import Data.List.Properties module _ {Fs Gs : List Container} {A B : Type} where extend : (Free Gs A → B) → Free (Fs ++ Gs) A → Free Fs B extend k = list-elim (λ Fs → Free (Fs ++ Gs) A → Free Fs B) (λ _ _ → cmap) k Fs _>>=_ : Free Fs A → (A → Free Gs B) → Free (Fs ++ Gs) B _>>=_ xs k = list-elim (λ Fs → Free Fs A → Free (Fs ++ Gs) B) (λ _ _ → cmap) k Fs xs