From 9ae58c21d025382a4d957a68eca8f77a5183be32 Mon Sep 17 00:00:00 2001 From: Nate Soares Date: Sat, 28 Jan 2012 12:06:30 -0800 Subject: [PATCH] Added Errorable instances to other monads. Yes, they are orphan instances. No, I don't care. I think the likelihood that the standard Reader/Writer/etc. monads implement Errorable in their own land is low, and if they do then just don't import Dangerous.Extensions. --- src/Control/Dangerous/Extensions.hs | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/Control/Dangerous/Extensions.hs diff --git a/src/Control/Dangerous/Extensions.hs b/src/Control/Dangerous/Extensions.hs new file mode 100644 index 0000000..f9c0b18 --- /dev/null +++ b/src/Control/Dangerous/Extensions.hs @@ -0,0 +1,30 @@ +-- This is the land of the orphans, so NO WHINING +{-# OPTIONS_GHC -fno-warn-orphans #-} +module Control.Dangerous.Extensions where +import Prelude hiding ( log ) +import Control.Dangerous +import Control.Monad.Cont +import Control.Monad.Maybe +import Control.Monad.Reader +import Control.Monad.State +import Control.Monad.Writer + +instance (Errorable m) => Errorable (ContT s m) where + log = lift . log + exit = lift . exit + +instance (Errorable m) => Errorable (MaybeT m) where + log = lift . log + exit = lift . exit + +instance (Monoid s, Errorable m) => Errorable (WriterT s m) where + log = lift . log + exit = lift . exit + +instance (Errorable m) => Errorable (ReaderT s m) where + log = lift . log + exit = lift . exit + +instance (Errorable m) => Errorable (StateT s m) where + log = lift . log + exit = lift . exit