diff --git a/dataframe-core.cabal b/dataframe-core.cabal
--- a/dataframe-core.cabal
+++ b/dataframe-core.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               dataframe-core
-version:            1.0.1.0
+version:            1.0.1.1
 
 synopsis:           Core data structures for the dataframe library.
 description:
diff --git a/src/DataFrame/Internal/Hash.hs b/src/DataFrame/Internal/Hash.hs
--- a/src/DataFrame/Internal/Hash.hs
+++ b/src/DataFrame/Internal/Hash.hs
@@ -22,9 +22,10 @@
 import qualified Data.Text as T
 import Data.Word (Word64)
 
--- | FNV-1a 64-bit offset basis (used as the initial accumulator).
--- The literal is unsigned and exceeds 'Int' range, so we round-trip through
--- 'Word64' to get the well-defined two's-complement bit pattern.
+{- | FNV-1a 64-bit offset basis (used as the initial accumulator).
+The literal is unsigned and exceeds 'Int' range, so we round-trip through
+'Word64' to get the well-defined two's-complement bit pattern.
+-}
 fnvOffset :: Int
 fnvOffset = fromIntegral (0xcbf29ce484222325 :: Word64)
 
diff --git a/src/DataFrame/Typed/Schema.hs b/src/DataFrame/Typed/Schema.hs
--- a/src/DataFrame/Typed/Schema.hs
+++ b/src/DataFrame/Typed/Schema.hs
@@ -44,6 +44,7 @@
     LeftJoinSchema,
     RightJoinSchema,
     FullOuterJoinSchema,
+    ToMaybe,
     WrapMaybe,
     WrapMaybeColumns,
     CollidingColumns,
@@ -280,10 +281,14 @@
     UniqueLeftHelper 'True n a rest rn = UniqueLeft rest rn
     UniqueLeftHelper 'False n a rest rn = Column n a ': UniqueLeft rest rn
 
--- | Wrap column types in Maybe.
+type family ToMaybe (a :: Type) :: Type where
+    ToMaybe (Maybe a) = Maybe a
+    ToMaybe a = Maybe a
+
+-- | Wrap column types in Maybe; idempotent on already-optional columns.
 type family WrapMaybe (cols :: [Type]) :: [Type] where
     WrapMaybe '[] = '[]
-    WrapMaybe (Column n a ': rest) = Column n (Maybe a) ': WrapMaybe rest
+    WrapMaybe (Column n a ': rest) = Column n (ToMaybe a) ': WrapMaybe rest
 
 -- | Wrap selected columns in Maybe by name list.
 type family WrapMaybeColumns (names :: [Symbol]) (cols :: [Type]) :: [Type] where
@@ -301,7 +306,7 @@
         [Type]
     where
     WrapMaybeColumnsHelper 'True n a names rest =
-        Column n (Maybe a) ': WrapMaybeColumns names rest
+        Column n (ToMaybe a) ': WrapMaybeColumns names rest
     WrapMaybeColumnsHelper 'False n a names rest =
         Column n a ': WrapMaybeColumns names rest
 
