diff --git a/src/Data/String.js b/src/Data/String.js
index fd42223..7b21753 100644
--- a/src/Data/String.js
+++ b/src/Data/String.js
@@ -149,7 +149,8 @@ exports._splitAt = function (just) {
     return function (i) {
       return function (s) {
         return i >= 0 && i < s.length ?
-               just([s.substring(0, i), s.substring(i)]) : nothing;
+               just({ before: s.substring(0, i), after: s.substring(i) }) :
+               nothing;
       };
     };
   };
diff --git a/src/Data/String.purs b/src/Data/String.purs
index 9eb2f6c..22be682 100644
--- a/src/Data/String.purs
+++ b/src/Data/String.purs
@@ -232,14 +232,14 @@ foreign import count :: (Char -> Boolean) -> String -> Int
 foreign import split :: Pattern -> String -> Array String
 
 -- | Returns the substrings of split at the given index, if the index is within bounds.
-splitAt :: Int -> String -> Maybe (Array String)
+splitAt :: Int -> String -> Maybe { before :: String, after :: String }
 splitAt = _splitAt Just Nothing
 
 foreign import _splitAt :: (forall a. a -> Maybe a)
                         -> (forall a. Maybe a)
                         -> Int
                         -> String
-                        -> Maybe (Array String)
+                        -> Maybe { before :: String, after :: String }
 
 -- | Converts the string into an array of characters.
 foreign import toCharArray :: String -> Array Char
diff --git a/test/Test/Data/String.purs b/test/Test/Data/String.purs
index e706ca1..541bb1b 100644
--- a/test/Test/Data/String.purs
+++ b/test/Test/Data/String.purs
@@ -5,7 +5,7 @@ import Prelude (Unit, Ordering(..), (==), ($), bind, negate, not, (/=), (&&))
 import Control.Monad.Eff (Eff)
 import Control.Monad.Eff.Console (CONSOLE, log)
 
-import Data.Maybe (Maybe(..), isNothing)
+import Data.Maybe (Maybe(..), isNothing, maybe)
 import Data.String
 
 import Test.Assert (ASSERT, assert)
@@ -160,11 +160,19 @@ testString = do
   assert $ split (Pattern "d") "abc" == ["abc"]
 
   log "splitAt"
-  assert $ splitAt 1 "" == Nothing
-  assert $ splitAt 0 "a" == Just ["", "a"]
-  assert $ splitAt 1 "ab" == Just ["a", "b"]
-  assert $ splitAt 3 "aabcc" == Just ["aab", "cc"]
-  assert $ splitAt (-1) "abc" == Nothing
+  let testSplitAt i str res =
+        assert $ case splitAt i str of
+          Nothing ->
+            isNothing res
+          Just { before, after } ->
+            maybe false (\r ->
+              r.before == before && r.after == after) res
+
+  testSplitAt 1 "" Nothing
+  testSplitAt 0 "a" $ Just {before: "", after: "a"}
+  testSplitAt 1 "ab" $ Just {before: "a", after: "b"}
+  testSplitAt 3 "aabcc" $ Just {before: "aab", after: "cc"}
+  testSplitAt (-1) "abc" $ Nothing
 
   log "toCharArray"
   assert $ toCharArray "" == []