diff --git a/lib/GEODE/Metadata/TSV.hs b/lib/GEODE/Metadata/TSV.hs
index 0b5c6719be8252a9c5def25060b80d57607a08ee..26fd95065192dbac8a4e5cbb6762ed6268d462ff 100644
--- a/lib/GEODE/Metadata/TSV.hs
+++ b/lib/GEODE/Metadata/TSV.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 module GEODE.Metadata.TSV
-  ( readNamedTsv
+  ( fromTsv
+  , readNamedTsv
   , readTsv
   , toTsv
   , tsvFile
@@ -15,16 +16,15 @@ import Data.Foldable (toList)
 import Data.Vector (Vector)
 import GEODE.Metadata.TSV.Header (HasDefaultHeader, getHeader, for)
 
+fromTsv :: DecodeOptions
+fromTsv = DecodeOptions {decDelimiter = fromIntegral (fromEnum '\t')}
+
 readNamedTsv :: FromNamedRecord a => FilePath -> IO (Either String (Vector a))
 readNamedTsv source =
   (fmap snd . decodeByNameWith fromTsv) <$> ByteString.readFile source
-  where
-    fromTsv = DecodeOptions {decDelimiter = fromIntegral (fromEnum '\t')}
 
 readTsv :: FromRecord a => FilePath -> IO (Either String (Vector a))
 readTsv source = decodeWith fromTsv NoHeader <$> ByteString.readFile source
-  where
-    fromTsv = DecodeOptions {decDelimiter = fromIntegral (fromEnum '\t')}
 
 toTsv :: EncodeOptions
 toTsv = defaultEncodeOptions