indexed-free-0.2: Control/Monad/Indexed/Free/Class.hs
{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}
module Control.Monad.Indexed.Free.Class (IxMonadFree(..)) where
import Control.Monad.Indexed
class IxMonad m => IxMonadFree f m | m -> f where
iwrap :: f i j (m j k a) -> m i k a
iliftFree :: (IxFunctor f, IxMonadFree f m) => f i j a -> m i j a
iliftFree = iwrap . imap ireturn