diff --git a/cflp.cabal b/cflp.cabal
--- a/cflp.cabal
+++ b/cflp.cabal
@@ -1,5 +1,5 @@
 Name:          cflp
-Version:       0.2.0
+Version:       0.2.1
 Cabal-Version: >= 1.2
 Synopsis:      Constraint Functional-Logic Programming in Haskell
 Description:   This package provides combinators for constraint
diff --git a/src/Data/LazyNondet/Primitive.lhs b/src/Data/LazyNondet/Primitive.lhs
--- a/src/Data/LazyNondet/Primitive.lhs
+++ b/src/Data/LazyNondet/Primitive.lhs
@@ -103,8 +103,8 @@
 > prim_eq :: MonadSolve cs m m
 >         => Untyped cs m -> Untyped cs m -> StateT cs m Bool
 > prim_eq x y = do
->   Cons _ ix xs <- solve x
->   Cons _ iy ys <- solve y
+>   Cons _ ix xs <- solveCons x
+>   Cons _ iy ys <- solveCons y
 >   if ix==iy then all_eq xs ys else return False
 >  where
 >   all_eq [] [] = return True
@@ -116,3 +116,17 @@
 We provide a generic comparison function for untyped non-deterministic
 data that is used to define a typed equality test in the
 `Data.LazyNondet.Bool` module.
+
+> solveCons :: MonadSolve cs m m
+>           => Untyped cs m -> StateT cs m (HeadNormalForm cs m)
+> solveCons x = do
+>   hnf <- solve x
+>   case hnf of
+>     FreeVar _ y -> solveCons y
+>     Delayed res -> get >>= solveCons . res
+>     _ -> return hnf
+
+The function `solveCons` is like `solve` but always yields a
+constructor-rooted term, i.e., no free variable or delayed
+computation.
+
