diff --git a/genai-lib.cabal b/genai-lib.cabal
--- a/genai-lib.cabal
+++ b/genai-lib.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.2
 
 name: genai-lib
-version: 2.0.1
+version: 2.1.0
 synopsis: A library for interacting with various generative AI LLMs
 description: A library for performing completions and chats with various
   generative AI LLMs (Large Language Models). Works today with Ollama and
@@ -9,7 +9,7 @@
 author: Dino Morelli
 maintainer: dino@ui3.info
 copyright: 2024 Dino Morelli
-category: Unclassified
+category: AI, Library
 license: ISC
 license-file: LICENSE
 build-type: Simple
@@ -72,7 +72,7 @@
   build-depends:
       aeson >= 2.1.2.1 && < 2.3
     , base >= 4.18.1.0 && < 5
-    , bytestring >= 0.11.5.2 && < 0.12
+    , bytestring >= 0.11.5.2 && < 0.13
     , containers >= 0.6.7 && < 0.7
     , http-client >= 0.7.16 && < 0.8
     , http-client-tls >= 0.3.6.3 && < 0.4
diff --git a/src/lib/GenAILib.hs b/src/lib/GenAILib.hs
--- a/src/lib/GenAILib.hs
+++ b/src/lib/GenAILib.hs
@@ -55,6 +55,7 @@
   , optional
   , mkMessage
   , mkMessageWithRole
+  , modRequest
   , Model (..)
   , Message (..)
   , Role (..)
@@ -157,7 +158,7 @@
 
 class Request a where
   -- | Append a @Message@ to an existing request
-  appendMessage :: Message -> a -> a
+  appendMessage :: Message -> RequestMod a
 
   -- | Construct a new @Request@
   --   Note: This request has no prompt data yet so at a minimum it must be used like this
@@ -176,15 +177,22 @@
   RequestMod f1 <> RequestMod f2 = RequestMod (f2 . f1)
 
 
+-- | Modify an existing request
+--
+--   > modRequest existingReq $ numopt "foo" 42
+modRequest :: r -> RequestMod r -> r
+modRequest req (RequestMod optSetter) = optSetter req
+
+
 -- | Append a system prompt
 systemmsg :: Request r => TL.Text -> RequestMod r
-systemmsg systemPrompt = RequestMod . appendMessage
+systemmsg systemPrompt = appendMessage
   $ mkMessageWithRole (Role "system") systemPrompt
 
 
 -- | Append a user message (prompt)
 usermsg :: Request r => TL.Text -> RequestMod r
-usermsg prompt = RequestMod . appendMessage $ mkMessage prompt
+usermsg prompt = appendMessage $ mkMessage prompt
 
 
 -- | Apply a request modifier to a Maybe value
diff --git a/src/lib/GenAILib/Ollama.hs b/src/lib/GenAILib/Ollama.hs
--- a/src/lib/GenAILib/Ollama.hs
+++ b/src/lib/GenAILib/Ollama.hs
@@ -43,8 +43,8 @@
   toEncoding = genericToEncoding customJSONOptions
 
 instance Request OllamaRequest where
-  appendMessage :: Message -> OllamaRequest -> OllamaRequest
-  appendMessage newMessage oldReq = oldReq { messages = oldReq.messages |> newMessage }
+  appendMessage :: Message -> RequestMod OllamaRequest
+  appendMessage newMessage = RequestMod (\req -> req { messages = req.messages |> newMessage })
 
   mkRequest :: TL.Text -> RequestMod OllamaRequest -> OllamaRequest
   mkRequest modelName (RequestMod optSetter) = optSetter
diff --git a/src/lib/GenAILib/OpenAI.hs b/src/lib/GenAILib/OpenAI.hs
--- a/src/lib/GenAILib/OpenAI.hs
+++ b/src/lib/GenAILib/OpenAI.hs
@@ -41,8 +41,8 @@
   toEncoding = genericToEncoding customJSONOptions
 
 instance Request OpenAIRequest where
-  appendMessage :: Message -> OpenAIRequest -> OpenAIRequest
-  appendMessage newMessage oldReq = oldReq { messages = oldReq.messages |> newMessage }
+  appendMessage :: Message -> RequestMod OpenAIRequest
+  appendMessage newMessage = RequestMod (\req -> req { messages = req.messages |> newMessage })
 
   mkRequest :: TL.Text -> RequestMod OpenAIRequest -> OpenAIRequest
   mkRequest modelName (RequestMod optSetter) = optSetter
@@ -72,9 +72,9 @@
 instance FromJSON OpenAIResponse where
   parseJSON (Object o) = do
     choices <- o .: "choices"
-    choice <- if null choices
-      then fail "No elements in choices array, unable to decode this JSON"
-      else pure $ head choices
+    choice <- case choices of
+      [] -> fail "No elements in choices array, unable to decode this JSON"
+      (c : _) -> pure c
     OpenAIResponse
       <$> (Model <$> o .: "model")
       <*> (posixSecondsToUTCTime <$> o .: "created")
diff --git a/stack.yaml.lock b/stack.yaml.lock
--- a/stack.yaml.lock
+++ b/stack.yaml.lock
@@ -1,7 +1,7 @@
 # This file was autogenerated by Stack.
 # You should not edit this file by hand.
 # For more information, please see the documentation at:
-#   https://docs.haskellstack.org/en/stable/lock_files
+#   https://docs.haskellstack.org/en/stable/topics/lock_files
 
 packages: []
 snapshots:
