packages feed

control-dsl-0.2.0.0: src/Control/Dsl/Monadic.hs

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RebindableSyntax #-}

module Control.Dsl.Monadic where

import Control.Dsl.PolyCont
import qualified Prelude

-- | This @Monadic@ keyword extracts the monadic value of a monadic expression.
newtype Monadic m r a = Monadic (m a)

instance Prelude.Monad m => PolyCont (Monadic m) (m b) a where
  runPolyCont (Monadic k) = (Prelude.>>=) k