diff --git a/lambdabot-haskell-plugins.cabal b/lambdabot-haskell-plugins.cabal
--- a/lambdabot-haskell-plugins.cabal
+++ b/lambdabot-haskell-plugins.cabal
@@ -1,5 +1,5 @@
 name:                   lambdabot-haskell-plugins
-version:                5.1.0.3
+version:                5.1.0.4
 
 license:                GPL
 license-file:           LICENSE
@@ -46,7 +46,7 @@
 
 build-type:             Simple
 cabal-version:          >= 1.8
-tested-with:            GHC == 7.8.4, GHC == 7.10.3
+tested-with:            GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.1
 
 extra-source-files:     src/Lambdabot/Plugin/Haskell/Free/Test.hs
 
diff --git a/src/Lambdabot/Plugin/Haskell/Pl/RuleLib.hs b/src/Lambdabot/Plugin/Haskell/Pl/RuleLib.hs
--- a/src/Lambdabot/Plugin/Haskell/Pl/RuleLib.hs
+++ b/src/Lambdabot/Plugin/Haskell/Pl/RuleLib.hs
@@ -16,7 +16,7 @@
 
 import Control.Monad.Fix (fix)
 
--- Next time I do somthing like this, I'll actually think about the combinator
+-- Next time I do something like this, I'll actually think about the combinator
 -- language before, instead of producing something ad-hoc like this:
 data RewriteRule
   = RR     Rewrite Rewrite           -- ^ A 'Rewrite' rule, rewrite the first to the second
diff --git a/src/Lambdabot/Plugin/Haskell/Pl/Rules.hs b/src/Lambdabot/Plugin/Haskell/Pl/Rules.hs
--- a/src/Lambdabot/Plugin/Haskell/Pl/Rules.hs
+++ b/src/Lambdabot/Plugin/Haskell/Pl/Rules.hs
@@ -414,7 +414,7 @@
      (\p q -> extE `a` (constE `a` q) `a` p),
 
   -- experimental support for Control.Arrow stuff
-  -- (costs quite a bit of performace)
+  -- (costs quite a bit of performance)
   -- uncurry ((. g) . (,) . f) --> f *** g
   rr (\f g -> uncurryE `a` ((flipE `a` compE `a` g) `c` commaE `c` f))
      (\f g -> crossE `a` f `a` g),
diff --git a/src/Lambdabot/Plugin/Haskell/Pl/Transform.hs b/src/Lambdabot/Plugin/Haskell/Pl/Transform.hs
--- a/src/Lambdabot/Plugin/Haskell/Pl/Transform.hs
+++ b/src/Lambdabot/Plugin/Haskell/Pl/Transform.hs
@@ -57,7 +57,7 @@
 
 type Env = M.Map String String
 
--- | Rename all variables to (locally) unqiue fresh ones
+-- | Rename all variables to (locally) unique fresh ones
 --
 -- It's a pity we still need that for the pointless transformation.
 -- Otherwise a newly created id/const/... could be bound by a lambda
diff --git a/src/Lambdabot/Plugin/Haskell/Source.hs b/src/Lambdabot/Plugin/Haskell/Source.hs
--- a/src/Lambdabot/Plugin/Haskell/Source.hs
+++ b/src/Lambdabot/Plugin/Haskell/Source.hs
@@ -24,7 +24,7 @@
         ]
 
     -- all the hard work is done to build the src map.
-    -- uses a slighly custom Map format
+    -- uses a slightly custom Map format
     , moduleSerialize = Just . readOnly $ M.fromList . map pair . splat . P.lines
     }
         where
diff --git a/src/Lambdabot/Plugin/Haskell/UnMtl.hs b/src/Lambdabot/Plugin/Haskell/UnMtl.hs
--- a/src/Lambdabot/Plugin/Haskell/UnMtl.hs
+++ b/src/Lambdabot/Plugin/Haskell/UnMtl.hs
@@ -161,7 +161,10 @@
 
 mtlParser :: String -> Either String Type
 mtlParser input = do
-    Hs.Module _ _ _ decls <- liftE $ parseModule ("type X = " ++ input ++ "\n")
+    hsMod <- liftE $ parseModule ("type X = " ++ input ++ "\n")
+    decls <- case hsMod of
+        (Hs.Module _ _ _ decls) -> return decls
+        _ -> fail "Not a module?"
     hsType <- case decls of
         (TypeDecl _ hsType:_) -> return hsType
         _ -> fail "No parse?"
