@@ -7,11 +7,13 @@
7{-# LANGUAGE LambdaCase #-}
7{-# LANGUAGE LambdaCase #-}
8module Main where
8module Main where
10+import Data.Functor.Identity
10import Control.Ether.Tags
11import Control.Ether.Tags
11import Control.Ether.TH
12import Control.Ether.TH
12import Control.Ether.Wrapped
13import Control.Ether.Wrapped
13import Control.Monad.Ether.Reader
14import Control.Monad.Ether.Reader
14import Control.Monad.Ether.State
15import Control.Monad.Ether.State
16+import Control.Monad.Ether.Implicit.Except.TH
15import qualified Control.Monad.Ether.Implicit.Reader as I
17import qualified Control.Monad.Ether.Implicit.Reader as I
16import qualified Control.Monad.Ether.Implicit.State as I
18import qualified Control.Monad.Ether.Implicit.State as I
17import qualified Control.Monad.Ether.Implicit.Except as I
19import qualified Control.Monad.Ether.Implicit.Except as I
@@ -162,8 +164,21 @@ exceptCore a b = do
162 then I.throw NegativeLog
164 then I.throw NegativeLog
163 else return $ log (a / b)
165 else return $ log (a / b)
170+try1 :: Functor m => I.ExceptT e m a -> (e -> a) -> m a
173+try2 :: Functor m => I.ExceptT e1 (I.ExceptT e2 m) a -> (e1 -> a) -> (e2 -> a) -> m a
176+try3 :: Functor m => I.ExceptT e1 (I.ExceptT e2 (I.ExceptT e3 m)) a -> (e1 -> a) -> (e2 -> a) -> (e3 -> a) -> m a
165exceptCore' :: Double -> Double -> String
179exceptCore' :: Double -> Double -> String
166−exceptCore' a b
180+exceptCore' a b = runIdentity $ do
182+ (show <$> exceptCore a b)
167− = either (\NegativeLog -> "nl") id
183+ (\NegativeLog -> "nl")
169− (either (\DivideByZero -> "dz") show <$> I.runExceptT (exceptCore a b))
184+ (\DivideByZero -> "dz")