logict 0.2.3 → 0.3
raw patch · 3 files changed
+13/−11 lines, 3 files
Files
- Control/Monad/Logic.hs +6/−9
- Control/Monad/Logic/Class.hs +6/−1
- logict.cabal +1/−1
Control/Monad/Logic.hs view
@@ -51,11 +51,6 @@ import Control.Monad.Logic.Class --- An Applicative instance for Identity, as MTL lacks one, currently-instance Applicative Identity where- pure = Identity- (Identity f) <*> (Identity a) = Identity (f a)- type SK r a = a -> r -> r type FK a = a @@ -167,12 +162,14 @@ fmap f = Logic . fmap f . unLogic instance Applicative Logic where- pure = Logic . pure- f <*> a = Logic $ unLogic f <*> unLogic a+ pure = Logic . return+ (Logic f) <*> (Logic a) = Logic . LogicT $ \sk fk ->+ unLogicT f (\g fk' -> unLogicT a (sk . g) fk') fk instance Alternative Logic where- empty = Logic empty- a1 <|> a2 = Logic $ unLogic a1 <|> unLogic a2+ empty = Logic . LogicT $ \_ fk -> fk+ (Logic a1) <|> (Logic a2) = Logic . LogicT $ \sk fk ->+ unLogicT a1 sk (unLogicT a2 sk fk) instance Monad Logic where return = Logic . return
Control/Monad/Logic/Class.hs view
@@ -18,7 +18,7 @@ -- (<http://www.cs.rutgers.edu/~ccshan/logicprog/LogicT-icfp2005.pdf>) ------------------------------------------------------------------------- -module Control.Monad.Logic.Class (MonadLogic(..), reflect) where+module Control.Monad.Logic.Class (MonadLogic(..), reflect, lnot) where import qualified Control.Monad.State.Lazy as LazyST import qualified Control.Monad.State.Strict as StrictST@@ -99,6 +99,11 @@ reflect :: MonadLogic m => Maybe (a, m a) -> m a reflect Nothing = mzero reflect (Just (a, m)) = return a `mplus` m++-- | Inverts a logic computation. If @m@ succeeds with at least one value,+-- @lnot m@ fails. If @m@ fails, then @lnot m@ succeeds the value @()@.+lnot :: MonadLogic m => m a -> m ()+lnot m = ifte (once m) (const mzero) (return ()) -- An instance of MonadLogic for lists instance MonadLogic [] where
logict.cabal view
@@ -1,5 +1,5 @@ Name: logict-Version: 0.2.3+Version: 0.3 Description: A continuation-based, backtracking, logic programming monad. An adaptation of the two-continuation implementation found in the paper "Backtracking, Interleaving, and Terminating