Subversion

Galculator

?curdirlinks? -

Blame information for rev 4

Line No. Rev Author Line
1 1 paulosilva  
2 {-# OPTIONS_GHC -Wall #-}
3  
4 -------------------------------------------------------------------------------
5  
6 {- |
7 Module      :  Control.MonadOr
8 Description :  MonadOr definition.
9 Copyright   :  (c) Paulo Silva
10 License     :  LGPL
11  
12 Maintainer  :  paufil@di.uminho.pt
13 Stability   :  experimental
14 Portability :  portable
15  
16 Monad definition satisfying the Monoid and Left Catch laws as refered in
17 <http://www.haskell.org/haskellwiki/MonadPlus_reform_proposal>
18  
19 -}
20  
21 -------------------------------------------------------------------------------
22  
23 module Control.MonadOr (
24   MonadOr,
25 4 paulosilva   mzero,
26 1 paulosilva   morelse
27  ) where
28  
29 3 paulosilva import Control.Monad.Error
30 import Control.Monad.State
31 1 paulosilva  
32 -------------------------------------------------------------------------------
33  
34 class MonadPlus m => MonadOr m where
35   morelse :: m a -> m a -> m a
36  
37 -------------------------------------------------------------------------------
38  
39 instance MonadOr [] where
40   morelse [] b = b
41   morelse a _ = a
42  
43 -------------------------------------------------------------------------------
44  
45 -- This instance is equal to mplus for maybe
46 instance MonadOr Maybe where
47   morelse = mplus
48  
49 -------------------------------------------------------------------------------
50  
51 3 paulosilva instance (Monad m, Error e) => MonadOr (ErrorT e m) where
52   morelse = mplus
53  
54 -------------------------------------------------------------------------------
55  
56 instance MonadOr m => MonadOr (StateT s m) where
57     m `morelse` n = StateT $ \s -> runStateT m s `morelse` runStateT n s
58  
59 -------------------------------------------------------------------------------

Theme by Vikram Singh | Powered by WebSVN v2.3.3