diff --git a/bower-json.cabal b/bower-json.cabal
--- a/bower-json.cabal
+++ b/bower-json.cabal
@@ -1,5 +1,5 @@
 name:                bower-json
-version:             0.7.0.0
+version:             0.8.0
 synopsis:            Read bower.json from Haskell
 license:             MIT
 license-file:        LICENSE
@@ -15,6 +15,9 @@
 
   This package provides a data type and ToJSON/FromJSON instances for Bower's
   package manifest file, bower.json.
+
+extra-source-files:
+  test-resources/bower.json
 
 source-repository head
   type:     git
diff --git a/src/Web/Bower/PackageMeta/Internal.hs b/src/Web/Bower/PackageMeta/Internal.hs
--- a/src/Web/Bower/PackageMeta/Internal.hs
+++ b/src/Web/Bower/PackageMeta/Internal.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TupleSections #-}
 {-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE CPP #-}
 
 -- | A data type representing the Bower.json package description file, together
 -- with a parser and related functions.
@@ -10,7 +11,9 @@
 
 module Web.Bower.PackageMeta.Internal where
 
-import Control.Applicative
+#if !MIN_VERSION_base(4,8,0)
+import Control.Applicative (pure, (<$>), (<*>))
+#endif
 import Control.Monad
 import Control.Category ((>>>))
 import Control.Monad.Error.Class (MonadError(..))
@@ -42,7 +45,7 @@
   , bowerDescription     :: Maybe String
   , bowerMain            :: [FilePath]
   , bowerModuleType      :: [ModuleType]
-  , bowerLicence         :: [String]
+  , bowerLicense         :: [String]
   , bowerIgnore          :: [String]
   , bowerKeywords        :: [String]
   , bowerAuthors         :: [Author]
@@ -186,9 +189,9 @@
 asPackageMeta =
   PackageMeta <$> key "name" (withString parsePackageName)
             <*> keyMay "description" asString
-            <*> keyOrDefault "main"       [] (eachInArray asString)
-            <*> keyOrDefault "moduleType" [] (eachInArray (withString parseModuleType))
-            <*> keyOrDefault "licence"    [] (eachInArray asString)
+            <*> keyOrDefault "main"       [] (arrayOrSingle asString)
+            <*> keyOrDefault "moduleType" [] (arrayOrSingle (withString parseModuleType))
+            <*> keyOrDefault "license"    [] (arrayOrSingle asString)
             <*> keyOrDefault "ignore"     [] (eachInArray asString)
             <*> keyOrDefault "keywords"   [] (eachInArray asString)
             <*> keyOrDefault "authors"    [] (eachInArray asAuthor)
@@ -199,6 +202,12 @@
             <*> keyOrDefault "resolutions"     [] (asAssocListOf Version)
             <*> keyOrDefault "private" False asBool
   where
+  arrayOrSingle :: Parse e a -> Parse e [a]
+  arrayOrSingle parser =
+    (fmap (:[]) parser) <|> eachInArray parser
+    where
+    (<|>) p q = catchError p (const q)
+
   asAssocListOf :: (String -> a) -> Parse BowerError [(PackageName, a)]
   asAssocListOf g =
     eachInObjectWithKey (parsePackageName . T.unpack) (g <$> asString)
@@ -267,7 +276,7 @@
       , maybePair "description" bowerDescription
       , maybeArrayPair "main" bowerMain
       , maybeArrayPair "moduleType" bowerModuleType
-      , maybeArrayPair "licence" bowerLicence
+      , maybeArrayPair "license" bowerLicense
       , maybeArrayPair "ignore" bowerIgnore
       , maybeArrayPair "keywords" bowerKeywords
       , maybeArrayPair "authors" bowerAuthors
diff --git a/test-resources/bower.json b/test-resources/bower.json
new file mode 100644
--- /dev/null
+++ b/test-resources/bower.json
@@ -0,0 +1,23 @@
+{
+  "name": "purescript-prelude",
+  "homepage": "https://github.com/purescript/purescript-prelude",
+  "description": "The PureScript Prelude",
+  "keywords": [
+    "purescript"
+  ],
+  "license": "MIT",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/purescript/purescript-prelude.git"
+  },
+  "ignore": [
+    "**/.*",
+    "bower_components",
+    "node_modules",
+    "output",
+    "test",
+    "bower.json",
+    "gulpfile.js",
+    "package.json"
+  ]
+}
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 import Test.Tasty
 import Test.Tasty.HUnit
@@ -26,6 +27,7 @@
   [ testGroup "FromJSON Author instance" authorTests
   , testGroup "optional keys" optionalKeyTests
   , testGroup "round trips" roundTripTests
+  , testGroup "real bower.json" realBowerJsonTests
   ]
 
 authorTests :: [TestTree]
@@ -99,7 +101,7 @@
     { bowerDescription     = Just "hello, world"
     , bowerMain            = ["foo.js"]
     , bowerModuleType      = [Globals, Node]
-    , bowerLicence         = ["MIT"]
+    , bowerLicense         = ["MIT"]
     , bowerIgnore          = []
     , bowerKeywords        = ["purescript"]
     , bowerAuthors         = [authorWithoutOptionalAttrs, authorWithEmail, authorWithBoth]
@@ -123,3 +125,15 @@
 roundTripTests =
   map (\(name, b) -> testCase name (Just b @=? decode (encode b)))
       allPkgs
+
+realBowerJsonTests :: [TestTree]
+realBowerJsonTests = [go]
+  where
+  go =
+    testCase "parses a real bower.json correctly" $ do
+      res <- decodeFile "./test-resources/bower.json"
+      case res of
+        Right PackageMeta{..} ->
+          ["MIT"] @=? bowerLicense
+        Left err ->
+          assertBool ("Failed to parse ./test-resources/bower.json: " ++ show err) False
