diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/goatee.cabal b/goatee.cabal
--- a/goatee.cabal
+++ b/goatee.cabal
@@ -1,10 +1,10 @@
 name: goatee
-version: 0.3.1.2
+version: 0.3.1.3
 synopsis: A monadic take on a 2,500-year-old board game - library.
 category: Game
 license: AGPL-3
 license-file: LICENSE
-copyright: Copyright 2014-2015 Bryan Gardiner
+copyright: Copyright 2014-2018 Bryan Gardiner
 author: Bryan Gardiner <bog@khumba.net>
 maintainer: Bryan Gardiner <bog@khumba.net>
 homepage: http://khumba.net/projects/goatee
@@ -32,7 +32,7 @@
         containers >= 0.4 && < 0.6,
         mtl >= 2.1 && < 2.3,
         parsec >= 3.1 && < 3.2,
-        template-haskell >= 2.7 && < 2.12
+        template-haskell >= 2.7 && < 2.14
     exposed-modules:
         Game.Goatee.App
         Game.Goatee.Common
@@ -67,7 +67,7 @@
         base >= 4 && < 5,
         containers >= 0.4 && < 0.6,
         goatee,
-        HUnit >= 1.2 && < 1.4,
+        HUnit >= 1.2 && < 1.7,
         mtl >= 2.1 && < 2.3,
         parsec >= 3.1 && < 3.2
     ghc-options: -W -fwarn-incomplete-patterns -fwarn-unused-do-bind
@@ -88,5 +88,4 @@
         Game.Goatee.Lib.TreeTest
         Game.Goatee.Lib.TypesTest
         Game.Goatee.Test.Common
-        Test
     type: exitcode-stdio-1.0
diff --git a/src/Game/Goatee/App.hs b/src/Game/Goatee/App.hs
--- a/src/Game/Goatee/App.hs
+++ b/src/Game/Goatee/App.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
@@ -29,7 +29,7 @@
 
 -- | A user-presentable copyright message.
 applicationCopyright :: String
-applicationCopyright = "Copyright 2014-2015 Bryan Gardiner"
+applicationCopyright = "Copyright 2014-2018 Bryan Gardiner"
 
 -- | The home page for Goatee on the web.
 applicationWebsite :: String
diff --git a/src/Game/Goatee/Common.hs b/src/Game/Goatee/Common.hs
--- a/src/Game/Goatee/Common.hs
+++ b/src/Game/Goatee/Common.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Common/Bigfloat.hs b/src/Game/Goatee/Common/Bigfloat.hs
--- a/src/Game/Goatee/Common/Bigfloat.hs
+++ b/src/Game/Goatee/Common/Bigfloat.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Lib/Board.hs b/src/Game/Goatee/Lib/Board.hs
--- a/src/Game/Goatee/Lib/Board.hs
+++ b/src/Game/Goatee/Lib/Board.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Lib/Monad.hs b/src/Game/Goatee/Lib/Monad.hs
--- a/src/Game/Goatee/Lib/Monad.hs
+++ b/src/Game/Goatee/Lib/Monad.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Lib/Parser.hs b/src/Game/Goatee/Lib/Parser.hs
--- a/src/Game/Goatee/Lib/Parser.hs
+++ b/src/Game/Goatee/Lib/Parser.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Lib/Property.hs b/src/Game/Goatee/Lib/Property.hs
--- a/src/Game/Goatee/Lib/Property.hs
+++ b/src/Game/Goatee/Lib/Property.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Lib/Property/Base.hs b/src/Game/Goatee/Lib/Property/Base.hs
--- a/src/Game/Goatee/Lib/Property/Base.hs
+++ b/src/Game/Goatee/Lib/Property/Base.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Lib/Property/Info.hs b/src/Game/Goatee/Lib/Property/Info.hs
--- a/src/Game/Goatee/Lib/Property/Info.hs
+++ b/src/Game/Goatee/Lib/Property/Info.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Lib/Property/Parser.hs b/src/Game/Goatee/Lib/Property/Parser.hs
--- a/src/Game/Goatee/Lib/Property/Parser.hs
+++ b/src/Game/Goatee/Lib/Property/Parser.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
@@ -54,6 +54,7 @@
 #if !MIN_VERSION_base(4,8,0)
 import Data.Monoid (Monoid, mappend, mconcat, mempty)
 #endif
+import Data.Semigroup as Sem ((<>), Semigroup)
 import qualified Game.Goatee.Common.Bigfloat as BF
 import Game.Goatee.Lib.Types
 import Text.ParserCombinators.Parsec (
@@ -73,12 +74,15 @@
 -- between two @CoordList@s.
 newtype CoordListMonoid = CoordListMonoid { runCoordListMonoid :: CoordList }
 
+instance Sem.Semigroup CoordListMonoid where
+  (<>) (CoordListMonoid x) (CoordListMonoid y) =
+    CoordListMonoid $ coords' (coordListSingles x ++ coordListSingles y)
+                              (coordListRects x ++ coordListRects y)
+
 instance Monoid CoordListMonoid where
   mempty = CoordListMonoid emptyCoordList
 
-  mappend (CoordListMonoid x) (CoordListMonoid y) =
-    CoordListMonoid $ coords' (coordListSingles x ++ coordListSingles y)
-                              (coordListRects x ++ coordListRects y)
+  mappend = (<>)
 
 single :: Parser a -> Parser a
 single valueParser = char '[' *> valueParser <* char ']'
diff --git a/src/Game/Goatee/Lib/Property/Renderer.hs b/src/Game/Goatee/Lib/Property/Renderer.hs
--- a/src/Game/Goatee/Lib/Property/Renderer.hs
+++ b/src/Game/Goatee/Lib/Property/Renderer.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Lib/Property/Value.hs b/src/Game/Goatee/Lib/Property/Value.hs
--- a/src/Game/Goatee/Lib/Property/Value.hs
+++ b/src/Game/Goatee/Lib/Property/Value.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Lib/Renderer.hs b/src/Game/Goatee/Lib/Renderer.hs
--- a/src/Game/Goatee/Lib/Renderer.hs
+++ b/src/Game/Goatee/Lib/Renderer.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Lib/Renderer/Tree.hs b/src/Game/Goatee/Lib/Renderer/Tree.hs
--- a/src/Game/Goatee/Lib/Renderer/Tree.hs
+++ b/src/Game/Goatee/Lib/Renderer/Tree.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Lib/Tree.hs b/src/Game/Goatee/Lib/Tree.hs
--- a/src/Game/Goatee/Lib/Tree.hs
+++ b/src/Game/Goatee/Lib/Tree.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/src/Game/Goatee/Lib/Types.hs b/src/Game/Goatee/Lib/Types.hs
--- a/src/Game/Goatee/Lib/Types.hs
+++ b/src/Game/Goatee/Lib/Types.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/Common/BigfloatTest.hs b/tests/Game/Goatee/Common/BigfloatTest.hs
--- a/tests/Game/Goatee/Common/BigfloatTest.hs
+++ b/tests/Game/Goatee/Common/BigfloatTest.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/CommonTest.hs b/tests/Game/Goatee/CommonTest.hs
--- a/tests/Game/Goatee/CommonTest.hs
+++ b/tests/Game/Goatee/CommonTest.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
@@ -141,7 +141,7 @@
 
 forTests = "for" ~: TestList
   [ "passes an empty list through" ~:
-    ([] @=?) =<< sequence (for [] $ const $ assertFailure "Nope.")
+    ([] @=?) =<< sequence (for [] $ const $ (assertFailure "Nope." :: IO ()))
 
   , "operates on each element of a list" ~:
     [2, 2, 4, 6, 10] @=? for [1, 1, 2, 3, 5] (* 2)
diff --git a/tests/Game/Goatee/Lib/BoardTest.hs b/tests/Game/Goatee/Lib/BoardTest.hs
--- a/tests/Game/Goatee/Lib/BoardTest.hs
+++ b/tests/Game/Goatee/Lib/BoardTest.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/Lib/MonadTest.hs b/tests/Game/Goatee/Lib/MonadTest.hs
--- a/tests/Game/Goatee/Lib/MonadTest.hs
+++ b/tests/Game/Goatee/Lib/MonadTest.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/Lib/ParserTest.hs b/tests/Game/Goatee/Lib/ParserTest.hs
--- a/tests/Game/Goatee/Lib/ParserTest.hs
+++ b/tests/Game/Goatee/Lib/ParserTest.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/Lib/ParserTestUtils.hs b/tests/Game/Goatee/Lib/ParserTestUtils.hs
--- a/tests/Game/Goatee/Lib/ParserTestUtils.hs
+++ b/tests/Game/Goatee/Lib/ParserTestUtils.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/Lib/Property/ParserTest.hs b/tests/Game/Goatee/Lib/Property/ParserTest.hs
--- a/tests/Game/Goatee/Lib/Property/ParserTest.hs
+++ b/tests/Game/Goatee/Lib/Property/ParserTest.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014-2015 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/Lib/PropertyTest.hs b/tests/Game/Goatee/Lib/PropertyTest.hs
--- a/tests/Game/Goatee/Lib/PropertyTest.hs
+++ b/tests/Game/Goatee/Lib/PropertyTest.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/Lib/RoundTripTest.hs b/tests/Game/Goatee/Lib/RoundTripTest.hs
--- a/tests/Game/Goatee/Lib/RoundTripTest.hs
+++ b/tests/Game/Goatee/Lib/RoundTripTest.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/Lib/TestInstances.hs b/tests/Game/Goatee/Lib/TestInstances.hs
--- a/tests/Game/Goatee/Lib/TestInstances.hs
+++ b/tests/Game/Goatee/Lib/TestInstances.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/Lib/TestUtils.hs b/tests/Game/Goatee/Lib/TestUtils.hs
--- a/tests/Game/Goatee/Lib/TestUtils.hs
+++ b/tests/Game/Goatee/Lib/TestUtils.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/Lib/TreeTest.hs b/tests/Game/Goatee/Lib/TreeTest.hs
--- a/tests/Game/Goatee/Lib/TreeTest.hs
+++ b/tests/Game/Goatee/Lib/TreeTest.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/Lib/TypesTest.hs b/tests/Game/Goatee/Lib/TypesTest.hs
--- a/tests/Game/Goatee/Lib/TypesTest.hs
+++ b/tests/Game/Goatee/Lib/TypesTest.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Game/Goatee/Test/Common.hs b/tests/Game/Goatee/Test/Common.hs
--- a/tests/Game/Goatee/Test/Common.hs
+++ b/tests/Game/Goatee/Test/Common.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
diff --git a/tests/Test.hs b/tests/Test.hs
--- a/tests/Test.hs
+++ b/tests/Test.hs
@@ -1,6 +1,6 @@
 -- This file is part of Goatee.
 --
--- Copyright 2014 Bryan Gardiner
+-- Copyright 2014-2018 Bryan Gardiner
 --
 -- Goatee is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Affero General Public License as published by
