monadiccp 0.5.1 → 0.5.2
raw patch · 3 files changed
+45/−6 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Control.CP.SearchTree: instance (MonadTree t) => MonadTree (ReaderT env t)
+ Control.CP.SearchTree: instance (MonadTree t) => MonadTree (StateT s t)
+ Control.CP.SearchTree: instance (Monoid w, MonadTree t) => MonadTree (WriterT w t)
Files
- Control/CP/Herbrand/HerbrandT.hs +4/−1
- Control/CP/SearchTree.hs +40/−4
- monadiccp.cabal +1/−1
Control/CP/Herbrand/HerbrandT.hs view
@@ -21,7 +21,10 @@ import Control.CP.Herbrand.Herbrand (HState, Unify, HTerm,initState,addH,newvarH) newtype HerbrandT t s a = HerbrandT { unHT :: StateT (HState t (HerbrandT t s)) s a }- deriving Monad++instance Monad s => Monad (HerbrandT t s) where+ return = HerbrandT . return+ m >>= f = HerbrandT $ unHT m >>= unHT . f instance MonadTrans (HerbrandT t) where lift = HerbrandT . lift
Control/CP/SearchTree.hs view
@@ -9,9 +9,15 @@ module Control.CP.SearchTree where -import Monad import Control.CP.Solver +import Control.Monad+import Control.Monad.Reader+import Control.Monad.Writer+import Control.Monad.State++import Data.Monoid+ ------------------------------------------------------------------------------- ----------------------------------- Tree -------------------------------------- -------------------------------------------------------------------------------@@ -29,8 +35,8 @@ show (Return _) = "Return" show (Try l r) = "Try (" ++ show l ++ ") (" ++ show r ++ ")" show (Add _ t) = "Add (" ++ show t ++ ")"- show (NewVar _) = "NewVar"- show (Label _) = "Label"+ show (NewVar _) = "NewVar <function>"+ show (Label _) = "Label <monadic value>" instance Solver s => Functor (Tree s) where fmap = liftM @@ -128,6 +134,8 @@ infixl 2 \/ +-- | Generalization of the search tree data type,+-- allowing monad transformer decoration. class (Monad m, Solver (TreeSolver m)) => MonadTree m where type TreeSolver m :: * -> * addTo :: Constraint (TreeSolver m) -> m a -> m a@@ -144,7 +152,6 @@ exists = NewVar label = Label - ------------------------------------------------------------------------------- ----------------------------------- Sugar ------------------------------------- -------------------------------------------------------------------------------@@ -183,3 +190,32 @@ add :: MonadTree tree => Constraint (TreeSolver tree) -> tree () add c = c `addTo` true++-------------------------------------------------------------------------------+--------------------------- Monad Transformer Instances -----------------------+-------------------------------------------------------------------------------++instance MonadTree t => MonadTree (ReaderT env t) where+ type TreeSolver (ReaderT env t) = TreeSolver t+ addTo constraint tree = ReaderT $ \env -> addTo constraint (runReaderT tree env)+ false = lift false+ l \/ r = ReaderT $ \env -> runReaderT l env \/ runReaderT r env+ exists f = ReaderT $ \env -> exists (\var -> runReaderT (f var) env)+ label p = ReaderT $ \env -> label (p >>= \m -> return $ runReaderT m env)+ ++instance (Monoid w, MonadTree t) => MonadTree (WriterT w t) where+ type TreeSolver (WriterT w t) = TreeSolver t+ addTo constraint tree = WriterT $ addTo constraint (runWriterT tree)+ false = lift false + l \/ r = WriterT $ runWriterT l \/ runWriterT r+ exists f = WriterT $ exists (\var -> runWriterT (f var))+ label p = WriterT $ label (p >>= \m -> return $ runWriterT m)++instance MonadTree t => MonadTree (StateT s t) where+ type TreeSolver (StateT s t) = TreeSolver t+ addTo constraint tree = StateT $ \s -> addTo constraint (runStateT tree s)+ false = lift false+ l \/ r = StateT $ \s -> runStateT l s \/ runStateT r s+ exists f = StateT $ \s -> exists (\var -> runStateT (f var) s)+ label p = StateT $ \s -> label (p >>= \m -> return $ runStateT m s)
monadiccp.cabal view
@@ -1,5 +1,5 @@ Name: monadiccp-Version: 0.5.1+Version: 0.5.2 Description: Monadic Constraint Programming framework License: BSD3 License-file: LICENSE