diff --git a/Control/Monad/Logic.hs b/Control/Monad/Logic.hs
--- a/Control/Monad/Logic.hs
+++ b/Control/Monad/Logic.hs
@@ -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
diff --git a/Control/Monad/Logic/Class.hs b/Control/Monad/Logic/Class.hs
--- a/Control/Monad/Logic/Class.hs
+++ b/Control/Monad/Logic/Class.hs
@@ -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
diff --git a/logict.cabal b/logict.cabal
--- a/logict.cabal
+++ b/logict.cabal
@@ -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
