diff --git a/aern2-mp.cabal b/aern2-mp.cabal
--- a/aern2-mp.cabal
+++ b/aern2-mp.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           aern2-mp
-version:        0.2.14.0
+version:        0.2.15.0
 synopsis:       Multi-precision ball (interval) arithmetic
 description:    Please see the README on GitHub at <https://github.com/michalkonecny/aern2/#readme>
 category:       Math
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,7 @@
 # Change log for aern2-mp
 
+* v 0.2.15 2023-04-11
+  * add generic selectCountable, instance for Kleenean
 * v 0.2.14 2023-04-10
   * minor improvements supporting aern2-linear and aern2-real
 * v 0.2.11 2022-08-25
diff --git a/src/AERN2/Select.hs b/src/AERN2/Select.hs
--- a/src/AERN2/Select.hs
+++ b/src/AERN2/Select.hs
@@ -48,4 +48,32 @@
     k2 <- cnk2
     select k1 k2
 
+class CanSelectCountable k where
+  {-| Must be Integer or similar -}
+  type SelectCountableType k 
+  {-|
+    Execute a sequence of lazy computations "in parallel" until one of them succeeds
+    and return the index of a succeeding computation. 
+  -}
+  selectCountable :: (Integer -> k) -> SelectCountableType k
 
+type CanSelectCountableInteger k = (CanSelectCountable k, SelectCountableType k ~ Integer)
+type CanSelectCountableCNInteger k = (CanSelectCountable k, SelectCountableType k ~ CN Integer)
+
+instance CanSelectCountable Kleenean where
+  type SelectCountableType Kleenean = Integer
+  selectCountable kleeneans = aux 0
+    where
+    aux i = case kleeneans i of
+      CertainTrue -> i
+      _ -> aux (i + 1)
+
+instance CanSelectCountable (CN Kleenean) where
+  type SelectCountableType (CN Kleenean) = CN Integer
+  selectCountable cnkleeneans = aux 0
+    where
+    aux i = do
+      ki <- cnkleeneans i
+      case ki of
+        CertainTrue -> cn i
+        _ -> aux (i + 1)
