diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for describe
 
+##0.4.0.2 -- 2020-02-07
+
+* Added representational type roles for BE and LE
+
 ##0.4.0.1 -- 2020-01-19
 
 * Fixed module exports
diff --git a/describe.cabal b/describe.cabal
--- a/describe.cabal
+++ b/describe.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.4
 name:                describe
-version:             0.4.0.1
+version:             0.4.0.2
 synopsis:            Combinators for describing binary data structures
 description:         Combinators for describing binary data structures, which eliminate the boilerplate of having to write isomorphic Get and Put instances. Please see the Github page for examples.
 homepage:            https://github.com/riugabachi/describe
@@ -24,6 +24,7 @@
                       RankNTypes,
                       FunctionalDependencies,
                       DeriveAnyClass,
+                      RoleAnnotations,
                       DeriveGeneric,
                       DerivingVia,
                       OverloadedStrings,
diff --git a/src/Data/Serialize/Describe/Combinators/BE.hs b/src/Data/Serialize/Describe/Combinators/BE.hs
--- a/src/Data/Serialize/Describe/Combinators/BE.hs
+++ b/src/Data/Serialize/Describe/Combinators/BE.hs
@@ -43,9 +43,11 @@
 f64 :: (Real f, Fractional f) => (s -> f) -> Descriptor s f
 f64 = isoField @(BE Double) rtf
 
-newtype BE a 
+newtype BE a
   = BE { unwrapBE :: a }
   deriving newtype (Show, Read, Num, Eq, Ord, Enum, Integral, Real, Fractional)
+
+type role BE representational
 
 instance Describe (BE Word16) where
     describe = mkDescriptor fi (const 2) getWord16be putWord16be
diff --git a/src/Data/Serialize/Describe/Combinators/ByteEnum.hs b/src/Data/Serialize/Describe/Combinators/ByteEnum.hs
--- a/src/Data/Serialize/Describe/Combinators/ByteEnum.hs
+++ b/src/Data/Serialize/Describe/Combinators/ByteEnum.hs
@@ -1,3 +1,11 @@
+-- | @ByteEnum@ wraps an @Enum@ to be described as a Word8. Intended to be used with DerivingVia so as to not introduce unnecessary newtype wrappers:
+--
+-- >
+-- > data MyEnum = A | B | C 
+-- >             deriving Enum
+-- >             deriving Describe via ByteEnum MyEnum
+-- >
+--
 module Data.Serialize.Describe.Combinators.ByteEnum where
 
 import GHC.Generics hiding (from)
@@ -7,10 +15,6 @@
 import Data.Serialize.Describe.Class
 import Data.Serialize.Describe.Isomorphisms
 
--- | Wraps an @Enum@ to be described as a Word8. Intended to be used with DerivingVia so as to not introduce unnecessary newtype wrappers:
--- > data MyEnum = A | B | C 
--- >             deriving Enum
--- >             deriving Describe via ByteEnum MyEnum
 newtype ByteEnum e 
   = ByteEnum { unwrapByteEnum :: e }
   deriving (Generic)
diff --git a/src/Data/Serialize/Describe/Combinators/LE.hs b/src/Data/Serialize/Describe/Combinators/LE.hs
--- a/src/Data/Serialize/Describe/Combinators/LE.hs
+++ b/src/Data/Serialize/Describe/Combinators/LE.hs
@@ -46,6 +46,8 @@
   = LE { unwrapLE :: a }
   deriving newtype (Show, Read, Num, Eq, Ord, Enum, Integral, Real, Fractional)
 
+type role LE representational
+
 instance Describe (LE Word16) where
     describe = mkDescriptor fi (const 2) getWord16le putWord16le
 
diff --git a/src/Data/Serialize/Describe/Internal/Descriptor.hs b/src/Data/Serialize/Describe/Internal/Descriptor.hs
--- a/src/Data/Serialize/Describe/Internal/Descriptor.hs
+++ b/src/Data/Serialize/Describe/Internal/Descriptor.hs
@@ -11,7 +11,7 @@
 import Control.Monad.Trans.Control
 import Control.Monad.Morph
 
--- | @Descriptor s a@ is an applicative functor that describes the binary structure for a structure 's' while deserializing value 'a'.
+-- | @Descriptor s a@ is a monad that describes the binary structure for a structure 's' while deserializing value 'a'.
 newtype DescriptorM m s a 
   = Descriptor { unwrapDescriptor :: (StateT Int (m Get) a, s -> StateT Int (m PutM) a) }
 
