Skip to content
Snippets Groups Projects
Commit 69257ba5 authored by Alice Brenon's avatar Alice Brenon
Browse files

Trimming the types apparatus that allows glueing TSV columns

parent 1050161c
No related branches found
No related tags found
No related merge requests found
...@@ -23,8 +23,7 @@ import GEODE.Metadata.Projector as Projector ...@@ -23,8 +23,7 @@ import GEODE.Metadata.Projector as Projector
import GEODE.Metadata.SplitContext as SplitContext hiding (page, rank) import GEODE.Metadata.SplitContext as SplitContext hiding (page, rank)
import GEODE.Metadata.TSV as TSV import GEODE.Metadata.TSV as TSV
import GEODE.Metadata.TSV.Header as TSV_Header import GEODE.Metadata.TSV.Header as TSV_Header
( Concat(..), DefaultFields(..), Glue(..), HasDefaultHeader(..) ( DefaultFields(..), HasDefaultHeader(..), WithDefaultHeader(..), glue )
, WithDefaultHeader(..) )
import GEODE.Metadata.Types as Types import GEODE.Metadata.Types as Types
list :: [Text] -> String list :: [Text] -> String
......
{-# LANGUAGE FlexibleInstances, ScopedTypeVariables, UndecidableInstances #-} {-# LANGUAGE FlexibleInstances, ScopedTypeVariables, UndecidableInstances #-}
module GEODE.Metadata.TSV.Header module GEODE.Metadata.TSV.Header
( DefaultFields(..) ( DefaultFields(..)
, Glue(..)
, HasDefaultHeader(..) , HasDefaultHeader(..)
, Concat(..)
, WithDefaultHeader(..) , WithDefaultHeader(..)
, for , for
, getHeader ) where , getHeader
, glue ) where
import Data.ByteString.Char8 as StrictByteString (pack) import Data.ByteString.Char8 as StrictByteString (pack)
import Data.Csv (FromNamedRecord(..), Header, ToNamedRecord(..), ToRecord(..)) import Data.Csv (FromNamedRecord(..), Header, ToNamedRecord(..), ToRecord(..))
...@@ -18,15 +17,7 @@ newtype DefaultFields a = DefaultFields [String] ...@@ -18,15 +17,7 @@ newtype DefaultFields a = DefaultFields [String]
class HasDefaultHeader a where class HasDefaultHeader a where
defaultFields :: DefaultFields a defaultFields :: DefaultFields a
instance (HasDefaultHeader a, HasDefaultHeader b) => instance (HasDefaultHeader a, HasDefaultHeader b) => HasDefaultHeader (a, b) where
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
defaultFields = DefaultFields (a ++ b) defaultFields = DefaultFields (a ++ b)
where where
DefaultFields a = (defaultFields :: DefaultFields a) DefaultFields a = (defaultFields :: DefaultFields a)
...@@ -40,17 +31,14 @@ getHeader _ = StrictByteString.pack <$> fromList fields ...@@ -40,17 +31,14 @@ getHeader _ = StrictByteString.pack <$> fromList fields
for :: HasDefaultHeader a => a for :: HasDefaultHeader a => a
for = undefined for = undefined
data Glue a b = Glue a b glue :: a -> b -> WithDefaultHeader (a, b)
newtype Concat a = Concat a glue a b = WithDefaultHeader (a, b)
instance (ToNamedRecord a, ToNamedRecord b) => ToNamedRecord (Glue a b) where
toNamedRecord (Glue a b) = union (toNamedRecord a) (toNamedRecord b)
instance (ToNamedRecord a, ToNamedRecord b) => ToNamedRecord (Concat (a, b)) where instance (ToNamedRecord a, ToNamedRecord b) => ToNamedRecord (a, b) where
toNamedRecord (Concat (a, b)) = union (toNamedRecord a) (toNamedRecord b) toNamedRecord (a, b) = union (toNamedRecord a) (toNamedRecord b)
instance (FromNamedRecord a, FromNamedRecord b) => FromNamedRecord (Glue a b) where instance (FromNamedRecord a, FromNamedRecord b) => FromNamedRecord (a, b) where
parseNamedRecord nr = Glue <$> parseNamedRecord nr <*> parseNamedRecord nr parseNamedRecord nr = (,) <$> parseNamedRecord nr <*> parseNamedRecord nr
instance (HasDefaultHeader a, ToNamedRecord a) => ToRecord (WithDefaultHeader a) where instance (HasDefaultHeader a, ToNamedRecord a) => ToRecord (WithDefaultHeader a) where
toRecord (WithDefaultHeader a) = (toNamedRecord a !) <$> getHeader a toRecord (WithDefaultHeader a) = (toNamedRecord a !) <$> getHeader a
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment