packages feed

logict 0.2.3 → 0.3

raw patch · 3 files changed

+13/−11 lines, 3 files

Files

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