diff --git a/examples/tailrecursive.hs b/examples/tailrecursive.hs
--- a/examples/tailrecursive.hs
+++ b/examples/tailrecursive.hs
@@ -34,7 +34,7 @@
 
 -- tail recursive
 sum' 0 acc = acc
-sum' n acc = sum' (n - 1) (acc + n)
+sum' n acc = let x = acc + n in x `seq` sum' (n - 1) x
 
 getSeconds :: Fay Double
 getSeconds = ffi "new Date()"
diff --git a/fay.cabal b/fay.cabal
--- a/fay.cabal
+++ b/fay.cabal
@@ -1,5 +1,5 @@
 name:                fay
-version:             0.14.2.0
+version:             0.14.3.0
 synopsis:            A compiler for Fay, a Haskell subset that compiles to JavaScript.
 description:         Fay is a proper subset of Haskell which is type-checked
                      with GHC, and compiled to JavaScript. It is lazy, pure, has a Fay monad,
@@ -21,14 +21,10 @@
                      .
                      /Release Notes/
                      .
-                     * Recursively check package directories for .hs files.
-                     .
-                     * Fix examples.
-                     .
-                     * Show line numbers in FFI errors.
-                     .
-                     * Support () in pattern matches.
+                     * Fix serialization of Defined/Nullable.
                      .
+                     * Fix Closure compression for Defined/Nullable.
+                     *
                      See full history at: <https://github.com/faylang/fay/commits>
 homepage:            http://fay-lang.org/
 bug-reports:         https://github.com/faylang/fay/issues
diff --git a/js/runtime.js b/js/runtime.js
--- a/js/runtime.js
+++ b/js/runtime.js
@@ -196,7 +196,7 @@
     if (fayObj instanceof $_Language$Fay$FFI$Undefined) {
       jsObj = undefined;
     } else {
-      jsObj = Fay$$fayToJsUserDefined(args[0],fayObj["slot1"]);
+      jsObj = Fay$$fayToJs(args[0],fayObj.slot1);
     }
 
   }
@@ -205,7 +205,7 @@
     if (fayObj instanceof $_Language$Fay$FFI$Null) {
       jsObj = null;
     } else {
-      jsObj = Fay$$fayToJsUserDefined(args[0],fayObj["slot1"]);
+      jsObj = Fay$$fayToJs(args[0],fayObj.slot1);
     }
 
   }
diff --git a/src/Test/Util.hs b/src/Test/Util.hs
--- a/src/Test/Util.hs
+++ b/src/Test/Util.hs
@@ -1,23 +1,32 @@
-module Test.Util where
+module Test.Util
+  ( fayPath
+  , isRight
+  , fromLeft
+  ) where
 
 import           Control.Applicative
 import           System.Directory
-import           System.Process.Extra
+import           System.Process.Extra (readAllFromProcess)
 
 -- Path to the fay executable, looks in cabal-dev, dist, PATH in that order.
 fayPath :: IO (Maybe FilePath)
-fayPath = do
-  cabalDev <- doesFileExist cabalDevPath
-  if cabalDev
-    then return (Just cabalDevPath)
-    else do
-      dist <- doesFileExist distPath
-      if dist
-        then return (Just distPath)
-        else either (const Nothing) (Just . concat . lines . snd) <$> readAllFromProcess "which" ["fay"] ""
+fayPath =
+  (<|>) <$> firstWhereM doesFileExist [cabalDevPath, distPath] <*> usingWhich
   where
     cabalDevPath = "./cabal-dev/bin/fay"
     distPath = "./dist/build/fay/fay"
+    usingWhich = fmap (concat . lines . snd) . hush <$> readAllFromProcess "which" ["fay"] ""
+
+firstWhereM :: (Monad m) => (a -> m Bool) -> [a] -> m (Maybe a)
+firstWhereM pred ins = case ins of
+  [] -> return Nothing
+  a:as -> pred a >>= \b ->
+          if b then return (Just a)
+               else firstWhereM pred as
+
+-- from the package `errors`
+hush :: Either a b -> Maybe b
+hush = either (const Nothing) Just
 
 isRight :: Either a b -> Bool
 isRight (Right _) = True
