diff --git a/haskus-utils-data.cabal b/haskus-utils-data.cabal
--- a/haskus-utils-data.cabal
+++ b/haskus-utils-data.cabal
@@ -1,5 +1,5 @@
 name:                haskus-utils-data
-version:             1.3
+version:             1.4
 synopsis:            Haskus data utility modules
 license:             BSD3
 license-file:        LICENSE
diff --git a/src/lib/Haskus/Utils/HList.hs b/src/lib/Haskus/Utils/HList.hs
--- a/src/lib/Haskus/Utils/HList.hs
+++ b/src/lib/Haskus/Utils/HList.hs
@@ -38,7 +38,7 @@
 import Haskus.Utils.Types
 
 -- | Heterogeneous list
-data family HList (l :: [*])
+data family HList (l :: [Type])
 data instance HList '[]       = HNil
 data instance HList (x ': xs) = x `HCons` HList xs
 
@@ -89,7 +89,7 @@
 -- Folding
 --------------------------------------
 
-class HFoldr f v (l :: [*]) r where
+class HFoldr f v (l :: [Type]) r where
     hFoldr :: f -> v -> HList l -> r
 
 instance (v ~ v') => HFoldr f v '[] v' where
@@ -107,7 +107,7 @@
 --
 -- It allows us to foldr over a list of types, without any associated hlist of
 -- values.
-class HFoldr' f v (l :: [*]) r where
+class HFoldr' f v (l :: [Type]) r where
    hFoldr' :: f -> v -> HList l -> r
 
 instance (v ~ v') => HFoldr' f v '[] v' where
@@ -122,7 +122,7 @@
       -- supposedly in the list (we don't have a real list associated to HList l)
       hFoldr' f v _ = apply f (undefined :: e, hFoldr' f v (undefined :: HList l) :: r)
 
-class HFoldl f (z :: *) xs (r :: *) where
+class HFoldl f (z :: Type) xs (r :: Type) where
     hFoldl :: f -> z -> HList xs -> r
 
 instance forall f z z' r x zx xs.
@@ -140,7 +140,7 @@
 --
 -- It allows us to foldl over a list of types, without any associated hlist of
 -- values.
-class HFoldl' f (z :: *) xs (r :: *) where
+class HFoldl' f (z :: Type) xs (r :: Type) where
     hFoldl' :: f -> z -> HList xs -> r
 
 instance forall f z z' r x zx xs.
@@ -212,8 +212,8 @@
 
 instance HTuple '[a] where
    hToTuple (a `HCons` HNil)
-      = Unit a
-   hFromTuple (Unit a)
+      = Solo a
+   hFromTuple (Solo a)
       = a `HCons` HNil
 
 instance HTuple '[a,b] where
diff --git a/src/lib/Haskus/Utils/Monad.hs b/src/lib/Haskus/Utils/Monad.hs
--- a/src/lib/Haskus/Utils/Monad.hs
+++ b/src/lib/Haskus/Utils/Monad.hs
@@ -36,10 +36,10 @@
 
 instance MonadInIO IO where
    {-# INLINABLE liftWith #-}
-   liftWith = id
+   liftWith wth f = wth f
 
    {-# INLINABLE liftWith2 #-}
-   liftWith2 = id
+   liftWith2 wth f = wth f
 
 instance MonadInIO m => MonadInIO (StateT s m) where
    {-# INLINABLE liftWith #-}
diff --git a/src/lib/Haskus/Utils/Tuple.hs b/src/lib/Haskus/Utils/Tuple.hs
--- a/src/lib/Haskus/Utils/Tuple.hs
+++ b/src/lib/Haskus/Utils/Tuple.hs
@@ -13,6 +13,7 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeFamilyDependencies #-}
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE PatternSynonyms #-}
 
 #if MIN_VERSION_base(4,14,0)
 {-# LANGUAGE StandaloneKindSignatures #-}
@@ -28,7 +29,7 @@
    , take4
    , fromTuple4
    , module Data.Tuple
-   , Unit (..)
+   , Solo, pattern Solo
    , Tuple
    , Tuple#
    , TypeReps
@@ -46,6 +47,13 @@
 import Data.Tuple
 import Haskus.Utils.Types
 
+#if !MIN_VERSION_base(4,15,0)
+type Solo = Unit
+{-# COMPLETE Solo #-}
+pattern Solo :: a -> Solo a
+pattern Solo a = Unit a
+#endif
+
 -- | Uncurry3
 uncurry3 :: (a -> b -> c -> r) -> (a,b,c) -> r
 {-# INLINABLE uncurry3 #-}
@@ -91,7 +99,7 @@
 
 instance ExtractTuple 0 '[a] where
    {-# INLINABLE tupleN #-}
-   tupleN (Unit t) = t
+   tupleN (Solo t) = t
 
 instance ExtractTuple 0 '[e0,e1] where
    {-# INLINABLE tupleN #-}
@@ -244,9 +252,9 @@
 class TupleTail ts ts' | ts -> ts' where
    tupleTail :: ts -> ts'
 
-instance TupleTail (a,b) (Unit b) where
+instance TupleTail (a,b) (Solo b) where
    {-# INLINABLE tupleTail #-}
-   tupleTail (_,b) = Unit b
+   tupleTail (_,b) = Solo b
 
 instance TupleTail (a,b,c) (b,c) where
    {-# INLINABLE tupleTail #-}
@@ -269,9 +277,9 @@
 class TupleCons t ts ts' | t ts -> ts' where
    tupleCons :: t -> ts -> ts'
 
-instance TupleCons a (Unit b) (a,b) where
+instance TupleCons a (Solo b) (a,b) where
    {-# INLINABLE tupleCons #-}
-   tupleCons a (Unit b) = (a,b)
+   tupleCons a (Solo b) = (a,b)
 
 instance TupleCons a (b,c) (a,b,c) where
    {-# INLINABLE tupleCons #-}
@@ -296,7 +304,7 @@
    tupleReorder :: t1 -> t2
 
 
-instance ReorderTuple (Unit a) (Unit a) where
+instance ReorderTuple (Solo a) (Solo a) where
    {-# INLINABLE tupleReorder #-}
    tupleReorder = id
 
@@ -463,7 +471,7 @@
    tupleCon = ()
 
 instance TupleCon '[a] where
-   tupleCon = Unit
+   tupleCon = Solo
 
 instance TupleCon '[a,b] where
    tupleCon = (,)
@@ -485,7 +493,7 @@
 -- TODO: put this family into GHC
 type family Tuple xs = t | t -> xs where
    Tuple '[]                                                    = ()
-   Tuple '[a]                                                   = Unit a
+   Tuple '[a]                                                   = Solo a
    Tuple '[a,b]                                                 = (a,b)
    Tuple '[a,b,c]                                               = (a,b,c)
    Tuple '[a,b,c,d]                                             = (a,b,c,d)
