{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE RebindableSyntax #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE TypeOperators #-} module Control.Dsl.Cont where import Prelude hiding ((>>), (>>=), return) type r !! a = (a -> r) -> r newtype Cont r a = Cont (r !! a) when True k = Cont k when False _ = Cont $ \f -> f ()