diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,11 @@
+texmath (0.11.1.1)
+
+  * Fix building with ghc-8.6.1 by removing need for now missing
+    MonadFail instances (Jonas Scholl).
+  * TeX reader: Allow operators like `/` to be scaled (#120).
+  * TeX reader: Improved efficiency of basicEnclosure.
+  * TeX reader: Handle `\bmod` (#115).
+
 texmath (0.11.1)
 
   * OMML writer: Use m:acc for accents in OMML (#119).  This fixes
diff --git a/src/Text/TeXMath/Readers/MathML.hs b/src/Text/TeXMath/Readers/MathML.hs
--- a/src/Text/TeXMath/Readers/MathML.hs
+++ b/src/Text/TeXMath/Readers/MathML.hs
@@ -149,8 +149,11 @@
 
 op :: Element -> MML (IR Exp)
 op e = do
-  Just inferredPosition <- (<|>) <$> (getFormType <$> findAttrQ "form" e)
+  mInferredPosition <- (<|>) <$> (getFormType <$> findAttrQ "form" e)
                             <*> asks position
+  inferredPosition <- case mInferredPosition of
+    Just inferredPosition -> pure inferredPosition
+    Nothing               -> throwError "Did not find an inferred position"
   opString <- getString e
   let dummy = Operator opString "" inferredPosition 0 0 0 []
   let opLookup = getMathMLOperator opString inferredPosition
@@ -346,7 +349,7 @@
 
 frac :: Element -> MML Exp
 frac e = do
-  [num, denom] <- mapM safeExpr =<< (checkArgs 2 e)
+  (num, denom) <- mapPairM safeExpr =<< (checkArgs2 e)
   rawThick <- findAttrQ "linethickness" e
   return $
     if thicknessZero rawThick
@@ -358,7 +361,7 @@
 
 kroot :: Element -> MML Exp
 kroot e = do
-  [base, index] <- mapM safeExpr =<< (checkArgs 2 e)
+  (base, index) <- mapPairM safeExpr =<< (checkArgs2 e)
   return $ ERoot index base
 
 phantom :: Element -> MML Exp
@@ -399,7 +402,7 @@
 
 sub :: Element -> MML [IR Exp]
 sub e =  do
-  [base, subs] <- (checkArgs 2 e)
+  (base, subs) <- checkArgs2 e
   reorderScripts base subs ESub
 
 -- Handles case with strethy elements in the base of sub/sup
@@ -416,28 +419,28 @@
 
 sup :: Element -> MML [IR Exp]
 sup e = do
-  [base, sups] <- (checkArgs 2 e)
+  (base, sups) <- checkArgs2 e
   reorderScripts base sups ESuper
 
 subsup :: Element -> MML Exp
 subsup e = do
-  [base, subs, sups] <- (checkArgs 3 e)
+  (base, subs, sups) <- checkArgs3 e
   ESubsup <$> safeExpr base <*> (postfixExpr subs)
                          <*> (postfixExpr sups)
 
 under :: Element -> MML Exp
 under e = do
-  [base, below] <- (checkArgs 2 e)
+  (base, below) <- checkArgs2 e
   EUnder False <$> safeExpr base <*> postfixExpr below
 
 over :: Element -> MML Exp
 over e = do
-  [base, above] <- (checkArgs 2 e)
+  (base, above) <- checkArgs2 e
   EOver False <$> safeExpr base <*> postfixExpr above
 
 underover :: Element -> MML Exp
 underover e = do
-  [base, below, above] <- (checkArgs 3 e)
+  (base, below, above) <- checkArgs3 e
   EUnderover False <$> safeExpr base  <*> (postfixExpr below)
                                       <*> (postfixExpr above)
 
@@ -551,15 +554,18 @@
 onlyText (CRef s : xs)  = (CData CDataText (fromMaybe s $ getUnicode s) Nothing) : onlyText xs
 onlyText (_:xs) = onlyText xs
 
-checkArgs :: Int -> Element -> MML [Element]
-checkArgs x e = do
-  let cs = elChildren e
-  if nargs x cs
-    then return cs
-    else (throwError ("Incorrect number of arguments for " ++ err e))
+checkArgs2 :: Element -> MML (Element, Element)
+checkArgs2 e = case elChildren e of
+  [a, b] -> return (a, b)
+  _      -> throwError ("Incorrect number of arguments for " ++ err e)
 
-nargs :: Int -> [a] -> Bool
-nargs n xs = length xs == n
+checkArgs3 :: Element -> MML (Element, Element, Element)
+checkArgs3 e = case elChildren e of
+  [a, b, c] -> return (a, b, c)
+  _         -> throwError ("Incorrect number of arguments for " ++ err e)
+
+mapPairM :: Monad m => (a -> m b) -> (a, a) -> m (b, b)
+mapPairM f (a, b) = (,) <$> (f a) <*> (f b)
 
 err :: Element -> String
 err e = name e ++ maybe "" (\x -> " line " ++ show x) (elLine e)
diff --git a/src/Text/TeXMath/Readers/TeX.hs b/src/Text/TeXMath/Readers/TeX.hs
--- a/src/Text/TeXMath/Readers/TeX.hs
+++ b/src/Text/TeXMath/Readers/TeX.hs
@@ -62,6 +62,7 @@
           , environment
           , unicode
           , ensuremath
+          , scaled
           , enclosure
           , texSymbol
           ] <* ignorable
@@ -273,11 +274,14 @@
                zs  -> return zs
 
 enclosure :: TP Exp
-enclosure = basicEnclosure <|> scaledEnclosure <|> delimited
+enclosure = basicEnclosure <|> delimited
 
--- Expensive
 basicEnclosure :: TP Exp
-basicEnclosure = choice (map (\(s, v) -> symbol s >> return v) enclosures)
+basicEnclosure = try $ do
+  possibleEncl <- lexeme (anyCtrlSeq <|> count 1 (oneOf "()[]|"))
+  case M.lookup possibleEncl enclosures of
+       Just x  -> return x
+       Nothing -> mzero
 
 fence :: String -> TP String
 fence cmd = do
@@ -304,11 +308,11 @@
   closec <- right <|> return ""
   return $ EDelimited openc closec contents
 
-scaledEnclosure :: TP Exp
-scaledEnclosure = do
+scaled :: TP Exp
+scaled = do
   cmd <- oneOfCommands (map fst S.scalers)
   case S.getScalerValue cmd of
-       Just  r -> EScaled r <$> basicEnclosure
+       Just  r -> EScaled r <$> (basicEnclosure <|> operator)
        Nothing -> mzero
 
 endLine :: TP Char
@@ -742,38 +746,39 @@
 symbol :: String -> TP String
 symbol s = lexeme $ try $ string s
 
-enclosures :: [(String, Exp)]
-enclosures = [ ("(", ESymbol Open "(")
-             , (")", ESymbol Close ")")
-             , ("[", ESymbol Open "[")
-             , ("]", ESymbol Close "]")
-             , ("\\{", ESymbol Open "{")
-             , ("\\}", ESymbol Close "}")
-             , ("\\lbrack", ESymbol Open "[")
-             , ("\\lbrace", ESymbol Open "{")
-             , ("\\rbrack", ESymbol Close "]")
-             , ("\\rbrace", ESymbol Close "}")
-             , ("\\llbracket", ESymbol Open "\x27E6")
-             , ("\\rrbracket", ESymbol Close "\x27E7")
-             , ("\\langle", ESymbol Open "\x27E8")
-             , ("\\rangle", ESymbol Close "\x27E9")
-             , ("\\lfloor", ESymbol Open "\x230A")
-             , ("\\rfloor", ESymbol Close "\x230B")
-             , ("\\lceil", ESymbol Open "\x2308")
-             , ("\\rceil", ESymbol Close "\x2309")
-             , ("|", ESymbol Open "|")
-             , ("|", ESymbol Close "|")
-             , ("\\|", ESymbol Open "\x2225")
-             , ("\\|", ESymbol Close "\x2225")
-             , ("\\lvert", ESymbol Open "\x7C")
-             , ("\\rvert", ESymbol Close "\x7C")
-             , ("\\vert", ESymbol Close "\x7C")
-             , ("\\lVert", ESymbol Open "\x2225")
-             , ("\\rVert", ESymbol Close "\x2225")
-             , ("\\Vert", ESymbol Close "\x2016")
-             , ("\\ulcorner", ESymbol Open "\x231C")
-             , ("\\urcorner", ESymbol Close "\x231D")
-             ]
+enclosures :: M.Map String Exp
+enclosures = M.fromList
+  [ ("(", ESymbol Open "(")
+  , (")", ESymbol Close ")")
+  , ("[", ESymbol Open "[")
+  , ("]", ESymbol Close "]")
+  , ("\\{", ESymbol Open "{")
+  , ("\\}", ESymbol Close "}")
+  , ("\\lbrack", ESymbol Open "[")
+  , ("\\lbrace", ESymbol Open "{")
+  , ("\\rbrack", ESymbol Close "]")
+  , ("\\rbrace", ESymbol Close "}")
+  , ("\\llbracket", ESymbol Open "\x27E6")
+  , ("\\rrbracket", ESymbol Close "\x27E7")
+  , ("\\langle", ESymbol Open "\x27E8")
+  , ("\\rangle", ESymbol Close "\x27E9")
+  , ("\\lfloor", ESymbol Open "\x230A")
+  , ("\\rfloor", ESymbol Close "\x230B")
+  , ("\\lceil", ESymbol Open "\x2308")
+  , ("\\rceil", ESymbol Close "\x2309")
+  , ("|", ESymbol Close "|")
+  , ("|", ESymbol Open "|")
+  , ("\\|", ESymbol Open "\x2225")
+  , ("\\|", ESymbol Close "\x2225")
+  , ("\\lvert", ESymbol Open "\x7C")
+  , ("\\rvert", ESymbol Close "\x7C")
+  , ("\\vert", ESymbol Close "\x7C")
+  , ("\\lVert", ESymbol Open "\x2225")
+  , ("\\rVert", ESymbol Close "\x2225")
+  , ("\\Vert", ESymbol Close "\x2016")
+  , ("\\ulcorner", ESymbol Open "\x231C")
+  , ("\\urcorner", ESymbol Close "\x231D")
+  ]
 
 operators :: M.Map String Exp
 operators = M.fromList [
@@ -1046,6 +1051,7 @@
   , ("\\max",EMathOperator "max")
   , ("\\min",EMathOperator "min")
   , ("\\mod",EMathOperator "mod")
+  , ("\\bmod",EMathOperator "mod")
   , ("\\Pr",EMathOperator "Pr")
   , ("\\sec",EMathOperator "sec")
   , ("\\sin",EMathOperator "sin")
diff --git a/texmath.cabal b/texmath.cabal
--- a/texmath.cabal
+++ b/texmath.cabal
@@ -1,5 +1,5 @@
 Name:                texmath
-Version:             0.11.1
+Version:             0.11.1.1
 Cabal-Version:       >= 1.10
 Build-type:          Simple
 Synopsis:            Conversion between formats used to represent mathematics.
