diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Revision history for describe
 
+##0.4.0.1 -- 2020-01-19
+
+* Fixed module exports
+* Updated docs
+
 ##0.4.0.0 -- 2020-01-19
 
 * Added lens isomorphism utilities
diff --git a/describe.cabal b/describe.cabal
--- a/describe.cabal
+++ b/describe.cabal
@@ -1,13 +1,13 @@
 cabal-version:       2.4
 name:                describe
-version:             0.4.0.0
+version:             0.4.0.1
 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
 license:             BSD-3-Clause
 license-file:        LICENSE
 author:              Riuga
-maintainer:          n/a
+maintainer:          Riuga
 category:            Data
 extra-source-files:  CHANGELOG.md
 
diff --git a/src/Data/Serialize/Describe/Class.hs b/src/Data/Serialize/Describe/Class.hs
--- a/src/Data/Serialize/Describe/Class.hs
+++ b/src/Data/Serialize/Describe/Class.hs
@@ -1,5 +1,5 @@
 module Data.Serialize.Describe.Class(
-  Describe, Context, describe,
+  Describe(..),
   field, isoField
 ) where
 
@@ -25,6 +25,7 @@
 import Data.Serialize.Describe.Isomorphisms
 
 class Describe a where
+  {-# MINIMAL #-}
   type Context (m :: (* -> *) -> * -> *) a :: Constraint 
   type Context m a = () 
 
@@ -38,13 +39,15 @@
   describe = morphTransformer (lift . runIdentityT) $ dimap from to gdescribe
 
 -- | A descriptor from structure to field.
-field :: forall a m s. ( Describe a
-                       , MonadTrans m
-                       , forall x. Monad x => Monad (m x)
-                       , Context m a
-                       )
-      => (s -> a) 
-      -> DescriptorM m s a
+field 
+  :: forall a m s. 
+      ( Describe a
+      , MonadTrans m
+      , forall x. Monad x => Monad (m x)
+      , Context m a
+      )
+  => (s -> a) 
+  -> DescriptorM m s a
 field f = morphRef f describe
 
 -- | Similar to @field@, but applied to an isomorphism.
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
@@ -8,10 +8,9 @@
 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
+-- > 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/Descriptor.hs b/src/Data/Serialize/Describe/Descriptor.hs
--- a/src/Data/Serialize/Describe/Descriptor.hs
+++ b/src/Data/Serialize/Describe/Descriptor.hs
@@ -12,7 +12,7 @@
   morphRef,
   morphTransformer,
   isolate,
-  lookAhead,
+  conditionally,
   cursor
 ) where
 
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
@@ -57,18 +57,34 @@
 unwrapPut s = flip evalStateT 0 . ($ s) . snd . unwrapDescriptor
 
 -- | Shifts the reference point of the described structure using the provided morphism. Identical to @lmap@.
-morphRef :: (MonadTrans m, forall x. Monad x => Monad (m x)) => (s -> t) -> DescriptorM m t a -> DescriptorM m s a
+morphRef 
+  :: ( MonadTrans m
+     , forall x. Monad x => Monad (m x)
+     ) 
+  => (s -> t) 
+  -> DescriptorM m t a 
+  -> DescriptorM m s a
 morphRef f (Descriptor (g, p)) = Descriptor (g, p . f)
 
 -- | Morphs the underlying monad transformer
-morphTransformer :: (MonadTrans t, MonadTrans u, forall n. Monad n => (Monad (t n), Monad (u n)))
-                 => (forall m x. Monad m => t m x -> u m x)
-                 -> DescriptorM t s a
-                 -> DescriptorM u s a
+morphTransformer 
+  :: ( MonadTrans t
+     , MonadTrans u
+     , forall n. Monad n => (Monad (t n), Monad (u n))
+     )
+  => (forall m x. Monad m => t m x -> u m x)
+  -> DescriptorM t s a
+  -> DescriptorM u s a
 morphTransformer f (Descriptor (g, p)) = Descriptor (hoist f g, hoist f <$> p)
 
 -- | Wrapper around @isolate@ from Data.Serialize.Get
-isolate :: (MonadTransControl m, forall x. Monad x => Monad (m x)) => Int -> DescriptorM m s a -> DescriptorM m s a
+isolate 
+  :: ( MonadTransControl m
+     , forall x. Monad x => Monad (m x)
+     ) 
+  => Int 
+  -> DescriptorM m s a 
+  -> DescriptorM m s a
 isolate amt desc = 
   Descriptor 
     (liftWith (\r' -> 
@@ -77,11 +93,14 @@
           >>= restoreT . return, snd $ unwrapDescriptor desc)
 
 -- | Similar to lookAhead from Data.Serialize.Get; puts only if the field is @Just@
-conditionally :: (MonadTransControl m, forall x. Monad x => Monad (m x))
-              => (s -> Maybe a)
-              -> (a -> Bool)
-              -> DescriptorM m a a 
-              -> DescriptorM m s (Maybe a)
+conditionally 
+  :: ( MonadTransControl m
+     , forall x. Monad x => Monad (m x)
+     )
+  => (s -> Maybe a)
+  -> (a -> Bool)
+  -> DescriptorM m a a 
+  -> DescriptorM m s (Maybe a)
 conditionally f pd desc = Descriptor (g, p)
   where
     g = 
