fact: Definition interp {E M : Type -> Type} {FM : Functor M} {MM : Monad M} {IM : MonadIter M} (h : E ~> M) : itree E ~> M := fun R => iter (fun t => match observe t with | RetF r => ret (inr r) | TauF t => ret (inl t) | VisF e k => fmap (fun x => inl (k x)) (h _ e) end).
imports: ExtLib(Structures.Functor Structures.Monad) ITree(Basics.Basics Core.ITreeDefinition Indexed.Relation)