diff --git a/Data/Fin/Private.hs b/Data/Fin/Private.hs
--- a/Data/Fin/Private.hs
+++ b/Data/Fin/Private.hs
@@ -93,12 +93,11 @@
 toFin :: ∀ n a . (Natural n, Integral a) => a -> Fin (P.Succ n)
 toFin = fromJust . toFinMay . (`mod` getConst (iterate @n (+1) 1))
 
-toFinMay :: (Natural n, Integral a) => a -> Maybe (Fin (P.Succ n))
-toFinMay = getCompose . getCompose . getCompose $
-           natural (Compose . Compose . Compose $ \ case 0 -> Just Zero
-                                                         _ -> Nothing)
-                   (Compose . Compose . Compose $ \ case 0 -> Just Zero
-                                                         n -> Succ <$> toFinMay (n-1))
+toFinMay :: (Natural n, Integral a) => a -> Maybe (Fin n)
+toFinMay = getCompose . getCompose $
+           natural (Compose . Compose $ pure Nothing)
+                   (Compose . Compose $ \ case 0 -> Just Zero
+                                               n -> Succ <$> toFinMay (n-1))
 
 infixr 5 :.
 data List n a where
diff --git a/Fin.cabal b/Fin.cabal
--- a/Fin.cabal
+++ b/Fin.cabal
@@ -1,5 +1,5 @@
 name:                Fin
-version:             0.2.2.0
+version:             0.2.3.0
 synopsis:            Finite totally-ordered sets
 -- description:         
 license:             BSD3
