diff --git a/prelude/prelude.purs b/prelude/prelude.purs
--- a/prelude/prelude.purs
+++ b/prelude/prelude.purs
@@ -7,7 +7,7 @@
   , ($), (#)
   , (:), cons
   , Show, show
-  , Functor, (<$>)
+  , Functor, (<$>), void
   , Apply, (<*>)
   , Applicative, pure, liftA1
   , Alternative, empty, (<|>)
@@ -116,6 +116,9 @@
   class Functor f where
     (<$>) :: forall a b. (a -> b) -> f a -> f b
 
+  void :: forall f a. (Functor f) => f a -> f Unit
+  void fa = const unit <$> fa
+
   infixl 4 <*>
 
   class (Functor f) <= Apply f where
@@ -267,10 +270,21 @@
     (==) = refEq
     (/=) = refIneq
 
+  foreign import eqArrayImpl
+    "function eqArrayImpl(f) {\
+    \  return function(xs) {\
+    \    return function(ys) {\
+    \      if (xs.length !== ys.length) return false;\
+    \      for (var i = 0; i < xs.length; i++) {\
+    \        if (!f(xs[i])(ys[i])) return false;\
+    \      }\
+    \      return true;\
+    \    };\
+    \  };\
+    \}" :: forall a. (a -> a -> Boolean) -> [a] -> [a] -> Boolean
+
   instance eqArray :: (Eq a) => Eq [a] where
-    (==) [] [] = true
-    (==) (x:xs) (y:ys) = x == y && xs == ys
-    (==) _ _ = false
+    (==) xs ys = eqArrayImpl (==) xs ys
     (/=) xs ys = not (xs == ys)
 
   data Ordering = LT | GT | EQ
diff --git a/psc/Main.hs b/psc/Main.hs
--- a/psc/Main.hs
+++ b/psc/Main.hs
@@ -25,6 +25,7 @@
 import System.Directory (createDirectoryIfMissing)
 import System.FilePath (takeDirectory)
 import System.Exit (exitSuccess, exitFailure)
+import System.IO (stderr)
 
 import Text.Parsec (ParseError)
 
@@ -51,12 +52,12 @@
   modules <- readInput input
   case modules of
     Left err -> do
-      U.print err
+      U.hPutStr stderr $ show err
       exitFailure
     Right ms -> do
       case P.compile opts (map snd ms) of
         Left err -> do
-          U.putStrLn err
+          U.hPutStrLn stderr err
           exitFailure
         Right (js, exts, _) -> do
           case output of
diff --git a/purescript.cabal b/purescript.cabal
--- a/purescript.cabal
+++ b/purescript.cabal
@@ -1,5 +1,5 @@
 name: purescript
-version: 0.5.2.5
+version: 0.5.2.6
 cabal-version: >=1.8
 build-type: Custom
 license: MIT
diff --git a/src/Language/PureScript/TypeChecker/Types.hs b/src/Language/PureScript/TypeChecker/Types.hs
--- a/src/Language/PureScript/TypeChecker/Types.hs
+++ b/src/Language/PureScript/TypeChecker/Types.hs
@@ -600,8 +600,8 @@
 infer' (ArrayLiteral vals) = do
   ts <- mapM infer vals
   els <- fresh
-  forM_ ts $ \(TypedValue _ _ t) -> els =?= TypeApp tyArray t
-  return $ TypedValue True (ArrayLiteral ts) els
+  forM_ ts $ \(TypedValue _ _ t) -> els =?= t
+  return $ TypedValue True (ArrayLiteral ts) (TypeApp tyArray els)
 infer' (ObjectLiteral ps) = do
   ensureNoDuplicateProperties ps
   ts <- mapM (infer . snd) ps
