If you don't need ADTs or record types, you could use a newtype
instead with GeneralizedNewtypeDeriving
:
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
import Data.Bits
import Data.Word
newtype RF = RF { unRF :: Word8 } deriving (Eq, Bits)
If you really wanted to, you can include a lot of other classes
newtype RF = RF { unRF :: Word8 }
deriving (Eq, Bits, Num, Integral, Real, Enum, Ord, Show)
Which would let you use it as
> 1 :: RF
RF {unRF = 1}
> [1..5] :: [RF]
[RF {unRF = 1},RF {unRF = 2},RF {unRF = 3},RF {unRF = 4},RF {unRF = 5}]
> let x = RF 1
> x + 2
RF {unRF = 3}
Which I think it quite handy