{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE FunctionalDependencies #-} module Control.Dsl.Empty where import Control.Dsl.Dsl import Data.Void import Control.Applicative import Prelude hiding ((>>), (>>=), return) data Empty r a where Empty :: Empty r Void instance Dsl Empty [r] Void where cpsApply Empty _ = [] instance Dsl Empty (Maybe r) Void where cpsApply Empty _ = Nothing empty :: Dsl Empty r Void => r empty = cpsApply Empty absurd