module Data.Thrist.Monad ( Monad'(..) ) where

-- DISCLAIMER:
-- Highly speculative module, naming, signatures not settled yet!

-- import Data.Thrist
import qualified Control.Monad as CM

-- Adapter for creating monads:
--   (Thrist (Monad' m) a b) is isomorphic to the monadic join : a -> mb

data Monad' :: (* -> *) -> * -> * -> * where
  Feed :: CM.Monad m => m b -> Monad' m a b
  Digest :: CM.Monad m => (a -> m b) -> Monad' m a b

-- It forms a monad -- gosh!
--

{-
instance Monad List' where
  return a = List' $ Cons (El a) Nil
  List' a >>= f = undefined
-}