diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+2024-09-07
+        * Version bump (4.0). (#532)
+        * Rename operator to avoid name clash. (#36)
+
 2024-07-07
         * Version bump (3.20). (#522)
 
diff --git a/copilot-libraries.cabal b/copilot-libraries.cabal
--- a/copilot-libraries.cabal
+++ b/copilot-libraries.cabal
@@ -1,6 +1,6 @@
 cabal-version:       >=1.10
 name:                copilot-libraries
-version:             3.20
+version:             4.0
 synopsis:            Libraries for the Copilot language.
 description:
   Libraries for the Copilot language.
@@ -36,12 +36,12 @@
 
   hs-source-dirs: src
 
-  build-depends: base             >= 4.9  && < 5
+  build-depends: base             >= 4.9 && < 5
 
-               , containers       >= 0.4  && < 0.7
-               , mtl              >= 2.0  && < 2.4
-               , parsec           >= 2.0  && < 3.2
-               , copilot-language >= 3.20 && < 3.21
+               , containers       >= 0.4 && < 0.7
+               , mtl              >= 2.0 && < 2.4
+               , parsec           >= 2.0 && < 3.2
+               , copilot-language >= 4.0 && < 4.1
 
   exposed-modules:
       Copilot.Library.Libraries
diff --git a/src/Copilot/Library/Libraries.hs b/src/Copilot/Library/Libraries.hs
--- a/src/Copilot/Library/Libraries.hs
+++ b/src/Copilot/Library/Libraries.hs
@@ -23,6 +23,6 @@
 import Copilot.Library.PTLTL
 import Copilot.Library.Statistics
 import Copilot.Library.RegExp
-import Copilot.Library.Utils
+import Copilot.Library.Utils      hiding ((!!))
 import Copilot.Library.Voting
 import Copilot.Library.Stacks
diff --git a/src/Copilot/Library/Utils.hs b/src/Copilot/Library/Utils.hs
--- a/src/Copilot/Library/Utils.hs
+++ b/src/Copilot/Library/Utils.hs
@@ -13,10 +13,10 @@
          -- ** Scans
          nscanl, nscanr, nscanl1, nscanr1,
          -- ** Indexing
-         case', (!!))
+         case', (!!), (!!!))
 where
 
-import Copilot.Language
+import Copilot.Language hiding ((!!))
 import qualified Prelude as P
 
 -- | Given a stream, produce an infinite list of streams dropping an increasing
@@ -135,21 +135,28 @@
 --
 -- WARNING: Very expensive! Consider using this only for very short lists.
 (!!) :: (Typed a, Eq b, Num b, Typed b) => [Stream a] -> Stream b -> Stream a
-ls !! n = let indices      = map
+(!!) = (!!!)
+{-# DEPRECATED (!!) "This function is deprecated in Copilot 4. Use (!!!)." #-}
+
+-- | Index.
+--
+-- WARNING: Very expensive! Consider using this only for very short lists.
+(!!!) :: (Typed a, Eq b, Num b, Typed b) => [Stream a] -> Stream b -> Stream a
+ls !!! n = let indices      = map
                              ( constant . fromIntegral )
                              [ 0 .. P.length ls - 1 ]
-              select [] _  = last ls
-              select
-                ( i : is )
-                ( x : xs ) = mux ( i == n ) x ( select is xs )
-                             -- should not happen
-              select _ []  = badUsage ("in (!!) defined in Utils.hs " P.++
-                               "in copilot-libraries")
-          in if null ls then
-               badUsage ("in (!!) defined in Utils.hs " P.++
-                            "indexing the empty list with !! is not defined")
-             else
-               select indices ls
+               select [] _  = last ls
+               select
+                 ( i : is )
+                 ( x : xs ) = mux ( i == n ) x ( select is xs )
+                              -- should not happen
+               select _ []  = badUsage ("in (!!) defined in Utils.hs " P.++
+                                "in copilot-libraries")
+           in if null ls then
+                badUsage ("in (!!) defined in Utils.hs " P.++
+                             "indexing the empty list with !! is not defined")
+              else
+                select indices ls
 
 -- | Cycle a list to form an infinite stream.
 cycle :: ( Typed a ) => [ a ] -> Stream a
