diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # kempe
 
+## 0.2.0.14
+
+  * Catch-up with `base`
+
 ## 0.2.0.13
 
   * Update for latest `alex` templates
diff --git a/docs/manual.pdf b/docs/manual.pdf
Binary files a/docs/manual.pdf and b/docs/manual.pdf differ
diff --git a/kempe.cabal b/kempe.cabal
--- a/kempe.cabal
+++ b/kempe.cabal
@@ -1,6 +1,6 @@
 cabal-version:   3.0
 name:            kempe
-version:         0.2.0.13
+version:         0.2.0.14
 license:         BSD-3-Clause
 license-file:    LICENSE
 copyright:       Copyright: (c) 2020-2022 Vanessa McHale
@@ -97,7 +97,7 @@
 
     ghc-options:      -Wall
     build-depends:
-        base >=4.9 && <5,
+        base >=4.19 && <5,
         array,
         bytestring,
         containers >=0.6.0.0,
diff --git a/run/Main.hs b/run/Main.hs
--- a/run/Main.hs
+++ b/run/Main.hs
@@ -3,7 +3,6 @@
 import           Control.Exception         (Exception, throwIO)
 import           Control.Monad             ((<=<))
 import qualified Data.ByteString.Lazy      as BSL
-import           Data.Semigroup            ((<>))
 import qualified Data.Text.Lazy.IO         as TLIO
 import qualified Data.Version              as V
 import           Kempe.AST
diff --git a/src/Kempe/AST.hs b/src/Kempe/AST.hs
--- a/src/Kempe/AST.hs
+++ b/src/Kempe/AST.hs
@@ -35,10 +35,10 @@
 import qualified Data.ByteString.Lazy    as BSL
 import           Data.Foldable           (toList)
 import           Data.Functor            (void)
+import qualified Data.Functor            as Fun
 import           Data.Int                (Int64, Int8)
 import           Data.List.NonEmpty      (NonEmpty)
 import qualified Data.List.NonEmpty      as NE
-import           Data.Semigroup          ((<>))
 import qualified Data.Set                as S
 import           Data.Text.Lazy.Encoding (decodeUtf8)
 import           Data.Word               (Word8)
@@ -138,7 +138,7 @@
     first f (Dip l as)      = Dip l (fmap (first f) as)
     first f (If l as as')   = If l (fmap (first f) as) (fmap (first f) as')
     first f (Case l ls)     =
-        let (ps, aLs) = NE.unzip ls
+        let (ps, aLs) = Fun.unzip ls
             in Case l $ NE.zip (fmap (first f) ps) (fmap (fmap (first f)) aLs)
 
 data BuiltinFn = Drop
diff --git a/src/Kempe/Asm/Arm/ControlFlow.hs b/src/Kempe/Asm/Arm/ControlFlow.hs
--- a/src/Kempe/Asm/Arm/ControlFlow.hs
+++ b/src/Kempe/Asm/Arm/ControlFlow.hs
@@ -7,7 +7,6 @@
 import           Data.Functor               (($>))
 import qualified Data.IntSet                as IS
 import qualified Data.Map                   as M
-import           Data.Semigroup             ((<>))
 import           Kempe.Asm.Arm.Type
 import           Kempe.Asm.Type
 
diff --git a/src/Kempe/Asm/Arm/Linear.hs b/src/Kempe/Asm/Arm/Linear.hs
--- a/src/Kempe/Asm/Arm/Linear.hs
+++ b/src/Kempe/Asm/Arm/Linear.hs
@@ -10,7 +10,6 @@
 import qualified Data.IntMap                as IM
 import qualified Data.IntSet                as IS
 import           Data.Maybe                 (fromMaybe)
-import           Data.Semigroup             ((<>))
 import qualified Data.Set                   as S
 import           Kempe.Asm.Arm.Type
 import           Kempe.Asm.Type
diff --git a/src/Kempe/Asm/Arm/Trans.hs b/src/Kempe/Asm/Arm/Trans.hs
--- a/src/Kempe/Asm/Arm/Trans.hs
+++ b/src/Kempe/Asm/Arm/Trans.hs
@@ -8,7 +8,6 @@
 import           Data.Foldable.Ext  (foldMapA)
 import           Data.Int           (Int64)
 import           Data.List          (scanl')
-import           Data.Semigroup     ((<>))
 import           Kempe.Asm.Arm.Type
 import           Kempe.AST.Size
 import           Kempe.IR.Monad
diff --git a/src/Kempe/Asm/Arm/Type.hs b/src/Kempe/Asm/Arm/Type.hs
--- a/src/Kempe/Asm/Arm/Type.hs
+++ b/src/Kempe/Asm/Arm/Type.hs
@@ -17,7 +17,6 @@
 import qualified Data.ByteString    as BS
 import           Data.Copointed
 import           Data.Int           (Int64, Int8)
-import           Data.Semigroup     ((<>))
 import           Data.Text.Encoding (decodeUtf8)
 import           Data.Word          (Word16)
 import           GHC.Generics       (Generic)
@@ -178,16 +177,8 @@
     pretty (AddRCPlus r i)   = brackets (pretty r <~> prettyInt i)
 
 -- | See: https://developer.arm.com/documentation/dui0068/b/arm-instruction-reference/conditional-execution?lang=en
-data Cond = Eq
-          | Neq
-          | UnsignedLeq
-          | UnsignedGeq
-          | UnsignedLt
-          | Geq
-          | Lt
-          | Gt
-          | Leq
-          deriving (Generic, NFData)
+data Cond = Eq | Neq | UnsignedLeq | UnsignedGeq | UnsignedLt
+          | Geq | Lt | Gt | Leq deriving (Generic, NFData)
 
 instance Pretty Cond where
     pretty Eq          = "EQ"
@@ -240,7 +231,7 @@
                deriving (Functor, Generic, NFData)
 
 -- | Don't call this on a negative number!
-prettyUInt :: (Integral a, Show a) => a -> Doc b
+prettyUInt :: Integral a => a -> Doc b
 prettyUInt i = "#" <> prettyHex i
 
 prettyInt :: (Pretty a) => a -> Doc b
@@ -291,7 +282,9 @@
 
 -- http://www.mathcs.emory.edu/~cheung/Courses/255/Syl-ARM/7-ARM/array-define.html
 prolegomena :: Doc ann
-prolegomena = ".data" <#> "kempe_data: .skip 32768" -- 32kb
+prolegomena = ".p2align 3" <#> ".data" <#> "kempe_data: .skip 32768" -- 32kb
+-- see https://stackoverflow.com/questions/65748033/how-to-fix-ld-warning-arm64-function-not-4-byte-aligned-warning
+-- since mine are byte-aligned
 
 macros :: Doc ann
 macros = prettyLines
diff --git a/src/Kempe/Asm/Liveness.hs b/src/Kempe/Asm/Liveness.hs
--- a/src/Kempe/Asm/Liveness.hs
+++ b/src/Kempe/Asm/Liveness.hs
@@ -8,7 +8,6 @@
 -- this seems to be faster
 import qualified Data.IntMap.Lazy as IM
 import qualified Data.IntSet      as IS
-import           Data.Semigroup   ((<>))
 import           Kempe.Asm.Type
 
 emptyLiveness :: Liveness
diff --git a/src/Kempe/Asm/Pretty.hs b/src/Kempe/Asm/Pretty.hs
--- a/src/Kempe/Asm/Pretty.hs
+++ b/src/Kempe/Asm/Pretty.hs
@@ -4,8 +4,7 @@
                         , prettyLabel
                         ) where
 
-import           Data.Semigroup ((<>))
-import           Prettyprinter  (Doc, indent, pretty)
+import           Prettyprinter (Doc, indent, pretty)
 
 i4 :: Doc ann -> Doc ann
 i4 = indent 4
diff --git a/src/Kempe/Asm/Type.hs b/src/Kempe/Asm/Type.hs
--- a/src/Kempe/Asm/Type.hs
+++ b/src/Kempe/Asm/Type.hs
@@ -8,7 +8,6 @@
 
 import           Control.DeepSeq (NFData)
 import qualified Data.IntSet     as IS
-import           Data.Semigroup  ((<>))
 import           GHC.Generics    (Generic)
 import           Prettyprinter   (Pretty (pretty), braces, punctuate, (<+>))
 
diff --git a/src/Kempe/Asm/X86/ControlFlow.hs b/src/Kempe/Asm/X86/ControlFlow.hs
--- a/src/Kempe/Asm/X86/ControlFlow.hs
+++ b/src/Kempe/Asm/X86/ControlFlow.hs
@@ -8,7 +8,6 @@
 import           Data.Functor               (($>))
 import qualified Data.IntSet                as IS
 import qualified Data.Map                   as M
-import           Data.Semigroup             ((<>))
 import           Kempe.Asm.Type
 import           Kempe.Asm.X86.Type
 
diff --git a/src/Kempe/Asm/X86/Linear.hs b/src/Kempe/Asm/X86/Linear.hs
--- a/src/Kempe/Asm/X86/Linear.hs
+++ b/src/Kempe/Asm/X86/Linear.hs
@@ -12,7 +12,6 @@
 import qualified Data.IntMap                as IM
 import qualified Data.IntSet                as IS
 import           Data.Maybe                 (fromMaybe)
-import           Data.Semigroup             ((<>))
 import qualified Data.Set                   as S
 import           Kempe.Asm.Type
 import           Kempe.Asm.X86.Type
diff --git a/src/Kempe/Asm/X86/Type.hs b/src/Kempe/Asm/X86/Type.hs
--- a/src/Kempe/Asm/X86/Type.hs
+++ b/src/Kempe/Asm/X86/Type.hs
@@ -17,7 +17,6 @@
 import qualified Data.ByteString.Lazy    as BSL
 import           Data.Copointed
 import           Data.Int                (Int64, Int8)
-import           Data.Semigroup          ((<>))
 import           Data.Text.Encoding      (decodeUtf8)
 import qualified Data.Text.Lazy.Encoding as TL
 import           Data.Word               (Word8)
diff --git a/src/Kempe/Check/Pattern.hs b/src/Kempe/Check/Pattern.hs
--- a/src/Kempe/Check/Pattern.hs
+++ b/src/Kempe/Check/Pattern.hs
@@ -13,10 +13,10 @@
 import           Data.Coerce                (coerce)
 import           Data.Foldable              (toList, traverse_)
 import           Data.Foldable.Ext
+import qualified Data.Functor               as Fun
 import qualified Data.IntMap.Strict         as IM
 import qualified Data.IntSet                as IS
 import           Data.List.NonEmpty         (NonEmpty (..))
-import qualified Data.List.NonEmpty         as NE
 import           Kempe.AST
 import           Kempe.Error
 import           Kempe.Name
@@ -26,7 +26,7 @@
 
 checkAtom :: PatternEnv -> Atom c b -> Maybe (Error b)
 checkAtom env (Case l ls) =
-    let (ps, as) = NE.unzip ls in
+    let (ps, as) = Fun.unzip ls in
     if isExhaustive env ps
         then foldMapAlternative (foldMapAlternative (checkAtom env)) as
         else Just (InexhaustiveMatch l)
diff --git a/src/Kempe/Error.hs b/src/Kempe/Error.hs
--- a/src/Kempe/Error.hs
+++ b/src/Kempe/Error.hs
@@ -8,7 +8,6 @@
 
 import           Control.DeepSeq   (NFData)
 import           Control.Exception (Exception)
-import           Data.Semigroup    ((<>))
 import           Data.Typeable     (Typeable)
 import           GHC.Generics      (Generic)
 import           Kempe.AST.Size
diff --git a/src/Kempe/Error/Warning.hs b/src/Kempe/Error/Warning.hs
--- a/src/Kempe/Error/Warning.hs
+++ b/src/Kempe/Error/Warning.hs
@@ -4,7 +4,6 @@
                            ) where
 
 import           Control.Exception (Exception)
-import           Data.Semigroup    ((<>))
 import           Data.Typeable     (Typeable)
 import           Kempe.AST
 import           Kempe.Name
diff --git a/src/Kempe/File.hs b/src/Kempe/File.hs
--- a/src/Kempe/File.hs
+++ b/src/Kempe/File.hs
@@ -21,7 +21,6 @@
 import           Control.Monad             ((<=<))
 import           Data.Bifunctor            (bimap)
 import           Data.Functor              (void)
-import           Data.Semigroup            ((<>))
 import           Data.Tuple.Ext            (fst3)
 import           Data.Typeable             (Typeable)
 import qualified Kempe.Asm.Arm.Type        as Arm
diff --git a/src/Kempe/IR.hs b/src/Kempe/IR.hs
--- a/src/Kempe/IR.hs
+++ b/src/Kempe/IR.hs
@@ -6,16 +6,17 @@
                 , size
                 ) where
 
-import           Data.Foldable              (toList, traverse_)
-import           Data.List.NonEmpty         (NonEmpty (..))
-import qualified Data.List.NonEmpty         as NE
 -- strict b/c it's faster according to benchmarks
 import           Control.Monad              (zipWithM)
 import           Control.Monad.State.Strict (State, gets, modify, runState)
 import           Data.Bifunctor             (second)
+import           Data.Foldable              (toList, traverse_)
 import           Data.Foldable.Ext
+import qualified Data.Functor               as Fun
 import           Data.Int                   (Int64)
 import qualified Data.IntMap                as IM
+import           Data.List.NonEmpty         (NonEmpty (..))
+import qualified Data.List.NonEmpty         as NE
 import           Data.Text.Encoding         (encodeUtf8)
 import           Kempe.AST
 import           Kempe.AST.Size
@@ -244,7 +245,7 @@
 writeAtom env l (Case _ ((_, as) :| [])) =
     (dataPointerDec 1:) <$> writeAtoms env l as
 writeAtom env l (Case (is, _) ls) =
-    let (ps, ass) = NE.unzip ls
+    let (ps, ass) = Fun.unzip ls
         decSz = case last is of
             TyBuiltin _ TyInt  -> 8
             TyBuiltin _ TyWord -> 8
diff --git a/src/Kempe/IR/Type.hs b/src/Kempe/IR/Type.hs
--- a/src/Kempe/IR/Type.hs
+++ b/src/Kempe/IR/Type.hs
@@ -17,7 +17,6 @@
 import qualified Data.ByteString      as BS
 import qualified Data.ByteString.Lazy as BSL
 import           Data.Int             (Int64, Int8)
-import           Data.Semigroup       ((<>))
 import           Data.Text.Encoding   (decodeUtf8)
 import           Data.Word            (Word8)
 import           GHC.Generics         (Generic)
diff --git a/src/Kempe/Inline.hs b/src/Kempe/Inline.hs
--- a/src/Kempe/Inline.hs
+++ b/src/Kempe/Inline.hs
@@ -4,11 +4,11 @@
 module Kempe.Inline ( inline
                     ) where
 
+import qualified Data.Functor       as Fun
 import           Data.Graph         (Graph, Vertex, graphFromEdges, path)
 import qualified Data.IntMap        as IM
 import qualified Data.List.NonEmpty as NE
 import           Data.Maybe         (fromMaybe, mapMaybe)
-import           Data.Semigroup     ((<>))
 import           Data.Tuple.Ext     (third3)
 import           Kempe.AST
 import           Kempe.Name
@@ -32,7 +32,7 @@
           inlineAtom declName (Dip l as) =
             [Dip l (inlineAtoms declName as)]
           inlineAtom declName (Case l ls) =
-            let (ps, ass) = NE.unzip ls
+            let (ps, ass) = Fun.unzip ls
                 in [Case l (NE.zip ps $ fmap (inlineAtoms declName) ass)]
           inlineAtom _ a = [a]
           fnMap = mkFnModuleMap m
diff --git a/src/Kempe/Lexer.x b/src/Kempe/Lexer.x
--- a/src/Kempe/Lexer.x
+++ b/src/Kempe/Lexer.x
@@ -27,7 +27,6 @@
 import Data.Int (Int8)
 import qualified Data.IntMap as IM
 import qualified Data.Map as M
-import Data.Semigroup ((<>))
 import qualified Data.Text as T
 import Data.Text.Encoding (decodeUtf8)
 import GHC.Generics (Generic)
diff --git a/src/Kempe/Monomorphize.hs b/src/Kempe/Monomorphize.hs
--- a/src/Kempe/Monomorphize.hs
+++ b/src/Kempe/Monomorphize.hs
@@ -28,7 +28,6 @@
 import           Data.List                  (elemIndex, find, groupBy, partition)
 import qualified Data.Map                   as M
 import           Data.Maybe                 (fromMaybe, mapMaybe)
-import           Data.Semigroup             ((<>))
 import qualified Data.Set                   as S
 import qualified Data.Text                  as T
 import           Data.Tuple                 (swap)
@@ -219,7 +218,7 @@
 
 insTyDecl :: KempeDecl a c b -> MonoM ()
 insTyDecl (TyDecl _ (Name _ (Unique k) _) fv leaves) = do
-    leafSizes <- traverse (sizeLeaf fv) (fmap snd leaves)
+    leafSizes <- traverse (sizeLeaf fv.snd) leaves
     let consSz = \tys -> 1 + maximum (($tys) <$> leafSizes) -- for the tag
     modifying szEnvLens (IM.insert k consSz)
 insTyDecl _ = error "Shouldn't happen."
diff --git a/src/Kempe/Name.hs b/src/Kempe/Name.hs
--- a/src/Kempe/Name.hs
+++ b/src/Kempe/Name.hs
@@ -8,7 +8,6 @@
                   ) where
 
 import           Control.DeepSeq (NFData (..))
-import           Data.Semigroup  ((<>))
 import qualified Data.Text       as T
 import           Kempe.Unique
 import           Prettyprinter   (Pretty (pretty))
diff --git a/src/Kempe/TyAssign.hs b/src/Kempe/TyAssign.hs
--- a/src/Kempe/TyAssign.hs
+++ b/src/Kempe/TyAssign.hs
@@ -17,7 +17,6 @@
 import           Data.Functor               (void, ($>))
 import qualified Data.IntMap                as IM
 import           Data.List.NonEmpty         (NonEmpty (..))
-import           Data.Semigroup             ((<>))
 import qualified Data.Set                   as S
 import qualified Data.Text                  as T
 import           Data.Tuple.Ext             (fst3)
diff --git a/src/Language/C/AST.hs b/src/Language/C/AST.hs
--- a/src/Language/C/AST.hs
+++ b/src/Language/C/AST.hs
@@ -6,7 +6,6 @@
                       , cSettings
                       ) where
 
-import           Data.Semigroup    ((<>))
 import qualified Data.Set          as S
 import qualified Data.Text         as T
 import           Prettyprinter     (Doc, LayoutOptions (..), PageWidth (..), Pretty (..), tupled, (<+>))
diff --git a/src/Prettyprinter/Debug.hs b/src/Prettyprinter/Debug.hs
--- a/src/Prettyprinter/Debug.hs
+++ b/src/Prettyprinter/Debug.hs
@@ -5,8 +5,7 @@
                            , (<#*>)
                            ) where
 
-import           Data.Semigroup ((<>))
-import           Prettyprinter  (Doc, Pretty (pretty), hardline, indent, (<+>))
+import           Prettyprinter (Doc, Pretty (pretty), hardline, indent, (<+>))
 
 
 (<#*>) :: Doc a -> Doc a -> Doc a
diff --git a/src/Prettyprinter/Ext.hs b/src/Prettyprinter/Ext.hs
--- a/src/Prettyprinter/Ext.hs
+++ b/src/Prettyprinter/Ext.hs
@@ -26,7 +26,7 @@
 (<~>) :: Doc a -> Doc a -> Doc a
 (<~>) x y = x <> ", " <> y
 
-prettyHex :: (Integral a, Show a) => a -> Doc ann
+prettyHex :: Integral a => a -> Doc ann
 prettyHex x = "0x" <> pretty (showHex x mempty)
 
 prettyLines :: [Doc ann] -> Doc ann
