diff --git a/lib/GEODE/Metadata.hs b/lib/GEODE/Metadata.hs index 529a50e78d811820d11059d513cdb00bfb6b3897..964e1aa1f9311c323e2a8b587747eda04ecd13ae 100644 --- a/lib/GEODE/Metadata.hs +++ b/lib/GEODE/Metadata.hs @@ -23,8 +23,7 @@ import GEODE.Metadata.Projector as Projector import GEODE.Metadata.SplitContext as SplitContext hiding (page, rank) import GEODE.Metadata.TSV as TSV import GEODE.Metadata.TSV.Header as TSV_Header - ( Concat(..), DefaultFields(..), Glue(..), HasDefaultHeader(..) - , WithDefaultHeader(..) ) + ( DefaultFields(..), HasDefaultHeader(..), WithDefaultHeader(..), glue ) import GEODE.Metadata.Types as Types list :: [Text] -> String diff --git a/lib/GEODE/Metadata/TSV/Header.hs b/lib/GEODE/Metadata/TSV/Header.hs index bfb43c770f5ffcab7d06d5fe280526762d31e7ec..0defa5eb7dc23d279f50fcfffd09d64ff549300d 100644 --- a/lib/GEODE/Metadata/TSV/Header.hs +++ b/lib/GEODE/Metadata/TSV/Header.hs @@ -1,12 +1,11 @@ {-# LANGUAGE FlexibleInstances, ScopedTypeVariables, UndecidableInstances #-} module GEODE.Metadata.TSV.Header ( DefaultFields(..) - , Glue(..) , HasDefaultHeader(..) - , Concat(..) , WithDefaultHeader(..) , for - , getHeader ) where + , getHeader + , glue ) where import Data.ByteString.Char8 as StrictByteString (pack) import Data.Csv (FromNamedRecord(..), Header, ToNamedRecord(..), ToRecord(..)) @@ -18,15 +17,7 @@ newtype DefaultFields a = DefaultFields [String] class HasDefaultHeader a where defaultFields :: DefaultFields a -instance (HasDefaultHeader a, HasDefaultHeader b) => - HasDefaultHeader (Glue a b) where - defaultFields = DefaultFields (a ++ b) - where - DefaultFields a = (defaultFields :: DefaultFields a) - DefaultFields b = (defaultFields :: DefaultFields b) - -instance (HasDefaultHeader a, HasDefaultHeader b) => - HasDefaultHeader (Concat (a, b)) where +instance (HasDefaultHeader a, HasDefaultHeader b) => HasDefaultHeader (a, b) where defaultFields = DefaultFields (a ++ b) where DefaultFields a = (defaultFields :: DefaultFields a) @@ -40,17 +31,14 @@ getHeader _ = StrictByteString.pack <$> fromList fields for :: HasDefaultHeader a => a for = undefined -data Glue a b = Glue a b -newtype Concat a = Concat a - -instance (ToNamedRecord a, ToNamedRecord b) => ToNamedRecord (Glue a b) where - toNamedRecord (Glue a b) = union (toNamedRecord a) (toNamedRecord b) +glue :: a -> b -> WithDefaultHeader (a, b) +glue a b = WithDefaultHeader (a, b) -instance (ToNamedRecord a, ToNamedRecord b) => ToNamedRecord (Concat (a, b)) where - toNamedRecord (Concat (a, b)) = union (toNamedRecord a) (toNamedRecord b) +instance (ToNamedRecord a, ToNamedRecord b) => ToNamedRecord (a, b) where + toNamedRecord (a, b) = union (toNamedRecord a) (toNamedRecord b) -instance (FromNamedRecord a, FromNamedRecord b) => FromNamedRecord (Glue a b) where - parseNamedRecord nr = Glue <$> parseNamedRecord nr <*> parseNamedRecord nr +instance (FromNamedRecord a, FromNamedRecord b) => FromNamedRecord (a, b) where + parseNamedRecord nr = (,) <$> parseNamedRecord nr <*> parseNamedRecord nr instance (HasDefaultHeader a, ToNamedRecord a) => ToRecord (WithDefaultHeader a) where toRecord (WithDefaultHeader a) = (toNamedRecord a !) <$> getHeader a