diff --git a/hw-bits.cabal b/hw-bits.cabal
--- a/hw-bits.cabal
+++ b/hw-bits.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hw-bits
-version:        0.7.0.4
+version:        0.7.0.5
 synopsis:       Bit manipulation
 description:    Please see README.md
 category:       Data, Bit
diff --git a/src/HaskellWorks/Data/Bits/BitWise.hs b/src/HaskellWorks/Data/Bits/BitWise.hs
--- a/src/HaskellWorks/Data/Bits/BitWise.hs
+++ b/src/HaskellWorks/Data/Bits/BitWise.hs
@@ -5,6 +5,7 @@
 module HaskellWorks.Data.Bits.BitWise
     ( -- * Bit map
       BitWise(..)
+    , Bit(..)
     , Shift(..)
     , TestBit(..)
     ) where
@@ -57,6 +58,9 @@
   -- | Bit-wise value of the given type with all bits set to one
   all1s :: a
 
+class Bit a where
+  bit :: Position -> a
+
 --------------------------------------------------------------------------------
 -- Instances
 
@@ -266,3 +270,46 @@
 
   (.>.) w n = B.shiftR w (fromIntegral n)
   {-# INLINE (.>.) #-}
+
+-----
+
+instance Bit Bool where
+  bit 1 = True
+  bit _ = False
+  {-# INLINE bit #-}
+
+instance Bit Int where
+  bit n = 1 .<. toCount n
+  {-# INLINE bit #-}
+
+instance Bit Word8 where
+  bit n = 1 .<. toCount n
+  {-# INLINE bit #-}
+
+instance Bit Word16 where
+  bit n = 1 .<. toCount n
+  {-# INLINE bit #-}
+
+instance Bit Word32 where
+  bit n = 1 .<. toCount n
+  {-# INLINE bit #-}
+
+instance Bit Word64 where
+  bit n = 1 .<. toCount n
+  {-# INLINE bit #-}
+
+instance Bit (Naive Word8) where
+  bit n = Naive (bit n)
+  {-# INLINE bit #-}
+
+instance Bit (Naive Word16) where
+  bit n = Naive (bit n)
+  {-# INLINE bit #-}
+
+instance Bit (Naive Word32) where
+  bit n = Naive (bit n)
+  {-# INLINE bit #-}
+
+instance Bit (Naive Word64) where
+  bit n = Naive (bit n)
+  {-# INLINE bit #-}
