diff --git a/System/Posix/Resource.hsc b/System/Posix/Resource.hsc
index a0d0d3522faab1fd0e167cca05916f7593b1dce2..58cff6fa150946a4effa95f2c990925644b74587 100644
--- a/System/Posix/Resource.hsc
+++ b/System/Posix/Resource.hsc
@@ -95,13 +95,16 @@ packResource ResourceTotalMemory   = (#const RLIMIT_AS)
 
 unpackRLimit :: CRLim -> ResourceLimit
 unpackRLimit (#const RLIM_INFINITY)  = ResourceLimitInfinity
-#if defined(RLIM_SAVED_MAX) && (RLIM_SAVED_MAX != RLIM_INFINITY)
-unpackRLimit (#const RLIM_SAVED_MAX) = ResourceLimitUnknown
+unpackRLimit other
+#if defined(RLIM_SAVED_MAX)
+    | (#const RLIM_SAVED_MAX) != (#const RLIM_INFINITY) &&
+      other == (#const RLIM_SAVED_MAX) = ResourceLimitUnknown
 #endif
-#if defined(RLIM_SAVED_CUR) && (RLIM_SAVED_CUR != RLIM_INFINITY)
-unpackRLimit (#const RLIM_SAVED_CUR) = ResourceLimitUnknown
+#if defined(RLIM_SAVED_CUR)
+    | (#const RLIM_SAVED_CUR) != (#const RLIM_INFINITY) &&
+      other == (#const RLIM_SAVED_CUR) = ResourceLimitUnknown
 #endif
-unpackRLimit other = ResourceLimit (fromIntegral other)
+    | otherwise = ResourceLimit (fromIntegral other)
 
 packRLimit :: ResourceLimit -> Bool -> CRLim
 packRLimit ResourceLimitInfinity _     = (#const RLIM_INFINITY)