diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,30 @@
 # Changelog for the Clash project
 
-## 1.2.2 *June 12th 2020*
+## 1.2.3 *July 11th 2020*
+* Changed:
+  * Upgrade to nixos 20.03. Nix and snap users will now use packages present in 20.03.
 
+* Added:
+  * `instance Monoid a => Monoid (Vec n a)`
+  * `instance Text.Printf(Index)`
+  * `instance Text.Printf(Signed)`
+  * `instance Text.Printf(Unsigned)`
 
+* Fixed:
+  * Clash renders incorrect VHDL when GHCs Worker/Wrapper transformation is enabled [#1402](https://github.com/clash-lang/clash-compiler/issues/14020)
+  * Minor faults in generated HDL when using annotations from `Clash.Annotations.SynthesisAttributes`
+  * Cabal installed through Snap (`clash.cabal`) can now access the internet to fetch pacakges. [#1411]https://github.com/clash-lang/clash-compiler/issues/1411
+  * Generated QSys file for `altpll` incompatible with Quartus CLI (did work in Quartus GUI)
+  * Clash no longer uses component names that clash with identifiers imported
+    from:
+    * IEEE.STD_LOGIC_1164.all
+    * IEEE.NUMERIC_STD.all
+    * IEEE.MATH_REAL.all
+    * std.textio.all
+    when generating VHDL.
+    See https://github.com/clash-lang/clash-compiler/issues/1439.
+
+## 1.2.2 *June 12th 2020*
 * Changed:
   * The hardwired functions to unroll primitive definitions for 'zipWith', 'map', 'foldr', and 'init' have been changed to only unroll a single step, whereas they would previously unroll the whole definition in one step. This allows Clash to take advantage of the lazy nature of these functions, in turn speeding up compilation speeds significantly in some cases. Part of [PR 1354](https://github.com/clash-lang/clash-compiler/pull/1354).
 
diff --git a/clash-prelude.cabal b/clash-prelude.cabal
--- a/clash-prelude.cabal
+++ b/clash-prelude.cabal
@@ -1,6 +1,6 @@
 Cabal-version:        2.2
 Name:                 clash-prelude
-Version:              1.2.2
+Version:              1.2.3
 Synopsis:             CAES Language for Synchronous Hardware - Prelude library
 Description:
   Clash is a functional hardware description language that borrows both its
diff --git a/src/Clash/Explicit/BlockRam/File.hs b/src/Clash/Explicit/BlockRam/File.hs
--- a/src/Clash/Explicit/BlockRam/File.hs
+++ b/src/Clash/Explicit/BlockRam/File.hs
@@ -71,6 +71,7 @@
 
 -}
 
+{-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE GADTs #-}
 
 {-# LANGUAGE Unsafe #-}
@@ -226,7 +227,7 @@
   -- ^ Value to write (at address @w@)
   -> Signal dom (BitVector m)
   -- ^ Value of the @blockRAM@ at address @r@ from the previous clock cycle
-blockRamFile# (Clock _) ena _sz file rd wen =
+blockRamFile# (Clock _) ena !_sz file rd wen =
   go
     ramI
     (withFrozenCallStack (errorX "blockRamFile#: intial value undefined"))
diff --git a/src/Clash/Explicit/ROM.hs b/src/Clash/Explicit/ROM.hs
--- a/src/Clash/Explicit/ROM.hs
+++ b/src/Clash/Explicit/ROM.hs
@@ -8,6 +8,7 @@
 ROMs
 -}
 
+{-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE RankNTypes #-}
 
@@ -104,7 +105,7 @@
   -- ^ Read address @rd@
   -> Signal dom a
   -- ^ The value of the ROM at address @rd@ from the previous clock cycle
-rom# _ en content =
+rom# !_ en content =
   go
     (withFrozenCallStack (deepErrorX "rom: initial value undefined"))
     (fromEnable en)
diff --git a/src/Clash/Sized/Internal/Index.hs b/src/Clash/Sized/Internal/Index.hs
--- a/src/Clash/Sized/Internal/Index.hs
+++ b/src/Clash/Sized/Internal/Index.hs
@@ -73,6 +73,7 @@
 import Data.Default.Class         (Default (..))
 import Data.Proxy                 (Proxy (..))
 import Text.Read                  (Read (..), ReadPrec)
+import Text.Printf                (PrintfArg (..))
 import Language.Haskell.TH        (TypeQ, appT, conT, litT, numTyLit, sigE)
 import Language.Haskell.TH.Syntax (Lift(..))
 #if MIN_VERSION_template_haskell(2,16,0)
@@ -360,6 +361,9 @@
 {-# NOINLINE toInteger# #-}
 toInteger# :: Index n -> Integer
 toInteger# (I n) = n
+
+instance KnownNat n => PrintfArg (Index n) where
+  formatArg = formatArg . toInteger
 
 instance (KnownNat n, 1 <= n) => Parity (Index n) where
   even = even . pack
diff --git a/src/Clash/Sized/Internal/Signed.hs b/src/Clash/Sized/Internal/Signed.hs
--- a/src/Clash/Sized/Internal/Signed.hs
+++ b/src/Clash/Sized/Internal/Signed.hs
@@ -87,6 +87,7 @@
 import Data.Default.Class             (Default (..))
 import Data.Proxy                     (Proxy (..))
 import Text.Read                      (Read (..), ReadPrec)
+import Text.Printf                    (PrintfArg (..))
 import GHC.Generics                   (Generic)
 import GHC.Natural                    (naturalFromInteger)
 #if MIN_VERSION_base(4,12,0)
@@ -418,6 +419,9 @@
 {-# NOINLINE toInteger# #-}
 toInteger# :: Signed n -> Integer
 toInteger# (S n) = n
+
+instance KnownNat n => PrintfArg (Signed n) where
+  formatArg = formatArg . toInteger
 
 instance KnownNat n => Parity (Signed n) where
   even = even . pack
diff --git a/src/Clash/Sized/Internal/Unsigned.hs b/src/Clash/Sized/Internal/Unsigned.hs
--- a/src/Clash/Sized/Internal/Unsigned.hs
+++ b/src/Clash/Sized/Internal/Unsigned.hs
@@ -85,6 +85,7 @@
 import Data.Default.Class             (Default (..))
 import Data.Proxy                     (Proxy (..))
 import Text.Read                      (Read (..), ReadPrec)
+import Text.Printf                    (PrintfArg (..))
 import GHC.Exts                       (narrow8Word#, narrow16Word#, narrow32Word#)
 import GHC.Generics                   (Generic)
 import GHC.Integer.GMP.Internals      (bigNatToWord)
@@ -348,6 +349,9 @@
 {-# NOINLINE toInteger# #-}
 toInteger# :: Unsigned n -> Integer
 toInteger# (U i) = naturalToInteger i
+
+instance KnownNat n => PrintfArg (Unsigned n) where
+  formatArg = formatArg . toInteger
 
 instance KnownNat n => Parity (Unsigned n) where
   even = even . pack
diff --git a/src/Clash/Sized/Vector.hs b/src/Clash/Sized/Vector.hs
--- a/src/Clash/Sized/Vector.hs
+++ b/src/Clash/Sized/Vector.hs
@@ -327,6 +327,13 @@
     where f EQ   keepGoing = keepGoing
           f done _         = done
 
+instance (KnownNat n, Semigroup a) => Semigroup (Vec n a) where
+  (<>) = zipWith (<>)
+
+instance (KnownNat n, Monoid a) => Monoid (Vec n a) where
+  mempty = repeat mempty
+  mappend = (<>)
+
 instance KnownNat n => Applicative (Vec n) where
   pure      = repeat
   fs <*> xs = zipWith ($) fs xs
