diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Releases
 
+## chessIO 0.9.3.1
+
+- Update internal book
+
 ## chessIO 0.9.3.0
 
 - Builds with GHC 9.2.1
diff --git a/book/twic-9g.bin b/book/twic-9g.bin
# file too large to diff: book/twic-9g.bin
diff --git a/chessIO.cabal b/chessIO.cabal
--- a/chessIO.cabal
+++ b/chessIO.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.34.4.
+-- This file has been generated from package.yaml by hpack version 0.35.1.
 --
 -- see: https://github.com/sol/hpack
 
 name:           chessIO
-version:        0.9.3.0
+version:        0.9.3.1
 synopsis:       Basic chess library
 description:    A simple and fast library for generating legal chess moves. Also includes a module for communication with external processes that speak the UCI (Universal Chess Interface) protocol, a PGN parser/pretty printer, and Polyglot opening book support. On top of that, provides a console frontend program (cboard) that can be used to interactively play against UCI engines.
 category:       Game
diff --git a/src/Game/Chess/Internal.hs b/src/Game/Chess/Internal.hs
--- a/src/Game/Chess/Internal.hs
+++ b/src/Game/Chess/Internal.hs
@@ -582,7 +582,7 @@
       when (canBlackCastleKingside pos occ) $ add bKscm
       when (canBlackCastleQueenside pos occ) $ add bQscm
 
-  Vector.unsafeFreeze =<< ($ v) . VUM.unsafeSlice 0 <$> readSTRef i
+  Vector.unsafeFreeze . ($ v) . VUM.unsafeSlice 0 =<< readSTRef i
 
 piecePlies :: Bitboard -> Bitboard -> Bitboard -> Bitboard
            -> Bitboard -> Bitboard -> (Ply -> ST s ())
diff --git a/src/Game/Chess/Internal/QuadBitboard.hs b/src/Game/Chess/Internal/QuadBitboard.hs
--- a/src/Game/Chess/Internal/QuadBitboard.hs
+++ b/src/Game/Chess/Internal/QuadBitboard.hs
@@ -189,7 +189,7 @@
   alignment _ = 8
   peek p = QBB <$> peek (castPtr p) <*> peek (castPtr $ p `plusPtr` 8) <*> peek (castPtr $ p `plusPtr` 16) <*> peek (castPtr $ p `plusPtr` 24)
   poke p QBB{black, pbq, nbk, rqk} = do
-    poke (castPtr $ p) black
+    poke (castPtr p) black
     poke (castPtr $ p `plusPtr` 8) pbq
     poke (castPtr $ p `plusPtr` 16) nbk
     poke (castPtr $ p `plusPtr` 24) rqk
diff --git a/src/Game/Chess/SAN.hs b/src/Game/Chess/SAN.hs
--- a/src/Game/Chess/SAN.hs
+++ b/src/Game/Chess/SAN.hs
@@ -290,7 +290,7 @@
     Bishop -> 'B' : source <> target
     Rook   -> 'R' : source <> target
     Queen  -> 'Q' : source <> target
-  piece = fromJust $ snd <$> pieceAt pos src
+  piece = snd (fromJust (pieceAt pos src))
   capture = isCapture pos m
   source
     | length ms == 1              = []
