Index: polemy/eval.d
==================================================================
--- polemy/eval.d
+++ polemy/eval.d
@@ -416,12 +416,15 @@
 				if(auto p = memokey in memo)
 				{
 					(*p)[1] ++;
 					return (*p)[0];
 				}
-				else
-					memo[memokey] = tuple(cast(Value)new BottomValue, 0);
+				else {
+					Value v;
+					try { v = evlay.lift(new BottomValue, ctx, pos); } catch { v = new BottomValue; }
+					memo[memokey] = tuple(v, 0);
+				}
 
 				Value r = nonMemoizedRun();
 
 				int touched = memo[memokey][1];
 				memo[memokey] = tuple(r, 12345678);