diff --git a/changelog.txt b/changelog.txt
--- a/changelog.txt
+++ b/changelog.txt
@@ -35,3 +35,7 @@
   + version of `chooses` that is left-biased (w.r.t. alternatives)
   + generalised arguments of longest_match and shortest_match to IsAltExpr 
   + exporting `optionalWithDef`
+
+0.4.0.3 -> 0.4.0.4
+  + `chooses` cannot be given an empty list (runtime error)
+  + updated `base` dependency
diff --git a/gll.cabal b/gll.cabal
--- a/gll.cabal
+++ b/gll.cabal
@@ -3,7 +3,7 @@
 
 -- The name of the package.
 name:                gll
-version:             0.4.0.3
+version:             0.4.0.4
 synopsis:            GLL parser with simple combinator interface 
 license:             BSD3
 license-file:        LICENSE
@@ -11,8 +11,8 @@
 maintainer:          L. Thomas van Binsbergen <ltvanbinsbergen@acm.org>
 category:            Compilers
 build-type:          Simple 
-cabal-version:       >=1.8
-tested-with:         GHC == 7.4.1, GHC == 7.8.3, GHC == 7.10.1 
+cabal-version:       >=1.24
+tested-with:         GHC == 8.0.1, GHC == 8.0.2 
 copyright:           Copyright (C) 2015 L. Thomas van Binsbergen
 stability:           experimental
 description:         
@@ -40,7 +40,7 @@
 
 library
     hs-source-dirs  :   src
-    build-depends   :     base >=4.3.1.0 && <= 4.9.0.0
+    build-depends   :     base >=4.3.1.0 && <= 5 
                         , containers >= 0.4
                         , array
                         , TypeCompose
@@ -62,6 +62,7 @@
     other-modules   :     GLL.Combinators.Visit.Grammar
                         , GLL.Combinators.Visit.Sem
                         , GLL.Combinators.Visit.Join
-    extensions      : TypeOperators, FlexibleInstances, ScopedTypeVariables, TypeSynonymInstances
     ghc-options:         -fwarn-incomplete-patterns -fwarn-monomorphism-restriction -fwarn-unused-imports
+    default-language:    Haskell2010
+    default-extensions:  TypeOperators, FlexibleInstances, ScopedTypeVariables, TypeSynonymInstances
 
diff --git a/src/GLL/Combinators/Interface.hs b/src/GLL/Combinators/Interface.hs
--- a/src/GLL/Combinators/Interface.hs
+++ b/src/GLL/Combinators/Interface.hs
@@ -351,12 +351,13 @@
 
 -- | Variant of '<::=>' that can be supplied with a list of alternates
 chooses :: (Show t, Ord t, IsAltExpr alt) => String -> [alt t a] -> SymbExpr t a
-chooses p alts = (<::=>) p (OO (map toAlt alts))
+chooses p alts | null alts = error "chooses cannot be given an empty list of alternatives"
+               | otherwise = (<::=>) p (OO (map toAlt alts))
 
 -- | Variant of '<::=' that can be supplied with a list of alternates
 chooses_prec :: (Show t, Ord t, IsAltExpr alt) => String -> [alt t a] -> SymbExpr t a
-chooses_prec p alts = (<::=) p (OO (map toAlt alts))
-
+chooses_prec p alts | null alts = error "chooses cannot be given an empty list of alternatives"
+                    | otherwise = (<::=) p (OO (map toAlt alts))
 
 infixl 4 <$$>
 -- |
