do-notation-dsl-0.1.0.3: An alternative to monads

Safe HaskellSafe
LanguageHaskell2010

Control.Dsl

Description

>>> :set -XTypeFamilies
>>> :set -XMultiParamTypeClasses
>>> :set -XFlexibleInstances
>>> :set -XFlexibleContexts
>>> :set -XRebindableSyntax
>>> :set -XTypeApplications
>>> import qualified Prelude
>>> import Prelude hiding ((>>), (>>=), return)
>>> import Control.Dsl
>>> import Control.Dsl.State
>>> import Control.Dsl.Yield
>>> import Control.Dsl.Return
>>> import Data.Void
>>> :{
f = do
  Yield "foo"
  config <- Get @Bool
  when config $ do
    Yield "bar"
    return ()
  return "baz"
:}
>>> :type f
f :: (Dsl (Yield [Char]) r (), Dsl (Return [Char]) r Void,
      Dsl Get r Bool) =>
     r
>>> f True :: [String]
["foo","bar","baz"]
>>> f False :: [String]
["foo","baz"]
>>> :{
instance Dsl (Yield String) (IO ()) () where
  cpsApply (Yield a) = (Prelude.>>=) (putStrLn $ "Yield " ++ a)
:}
>>> :{
instance Dsl Get (IO ()) Bool where
  cpsApply Get f = (putStrLn "Get") Prelude.>> f False
:}
>>> :{
instance Dsl (Return String) (IO ()) Void where
  cpsApply (Return a) _ = putStrLn $ "Return " ++ a
:}
>>> f :: IO ()
Yield foo
Get
Return baz
Synopsis

Documentation

class Dsl k r a where Source #

This type class witnesses a use case of k, which is an ad-hoc delimited continuation adaptive to the answer type r.

Minimal complete definition

cpsApply

Methods

cpsApply :: k r0 a -> r !! a Source #

Instances
Dsl Empty [r] Void Source # 
Instance details

Defined in Control.Dsl.Empty

Methods

cpsApply :: Empty r0 Void -> [r] !! Void Source #

Dsl Empty (Maybe r) Void Source # 
Instance details

Defined in Control.Dsl.Empty

Methods

cpsApply :: Empty r0 Void -> Maybe r !! Void Source #

Dsl k r a => Dsl k (b -> r) a Source # 
Instance details

Defined in Control.Dsl.Dsl

Methods

cpsApply :: k r0 a -> (b -> r) !! a Source #

Dsl Get (State a b) a Source # 
Instance details

Defined in Control.Dsl.State

Methods

cpsApply :: Get r0 a -> State a b !! a Source #

Dsl (Return r) r Void Source # 
Instance details

Defined in Control.Dsl.Return

Methods

cpsApply :: Return r r0 Void -> r !! Void Source #

Dsl (Shift r) r a Source # 
Instance details

Defined in Control.Dsl.Shift

Methods

cpsApply :: Shift r r0 a -> r !! a Source #

Monad m => Dsl (Monadic m) (m b) a Source # 
Instance details

Defined in Control.Dsl.Monadic

Methods

cpsApply :: Monadic m r0 a -> m b !! a Source #

Dsl (Return r) (IO r) Void Source # 
Instance details

Defined in Control.Dsl.Return

Methods

cpsApply :: Return r r0 Void -> IO r !! Void Source #

Dsl (Return r) (Maybe r) Void Source # 
Instance details

Defined in Control.Dsl.Return

Methods

cpsApply :: Return r r0 Void -> Maybe r !! Void Source #

Dsl (Return r) [r] Void Source # 
Instance details

Defined in Control.Dsl.Return

Methods

cpsApply :: Return r r0 Void -> [r] !! Void Source #

Dsl (Yield a) [a] () Source # 
Instance details

Defined in Control.Dsl.Yield

Methods

cpsApply :: Yield a r0 () -> [a] !! () Source #

Dsl (Return a) (r !! a) Void Source # 
Instance details

Defined in Control.Dsl.Return

Methods

cpsApply :: Return a r0 Void -> (r !! a) !! Void Source #

Dsl (Put a) (State a b) () Source # 
Instance details

Defined in Control.Dsl.State

Methods

cpsApply :: Put a r0 () -> State a b !! () Source #

return :: Dsl (Return r0) r Void => r0 -> r Source #

(>>=) :: Do k r a => k r a -> r !! a Source #

(>>) :: Do k r a => k r a -> r -> r Source #

when :: Bool -> (r !! ()) -> Cont r () Source #