0 | module Text.TSV.Encoder
5 | import Data.Vect.Quantifiers as VQ
6 | import Data.List.Quantifiers as LQ
18 | interface TSVEncoder a where
19 | constructor MkTSVEncoder
20 | encodeOnto : SnocList String -> a -> SnocList String
27 | TSVEncoder () where encodeOnto sc v = sc :< show v
30 | TSVEncoder Bits8 where encodeOnto sc v = sc :< show v
33 | TSVEncoder Bits16 where encodeOnto sc v = sc :< show v
36 | TSVEncoder Bits32 where encodeOnto sc v = sc :< show v
39 | TSVEncoder Bits64 where encodeOnto sc v = sc :< show v
42 | TSVEncoder Int8 where encodeOnto sc v = sc :< show v
45 | TSVEncoder Int16 where encodeOnto sc v = sc :< show v
48 | TSVEncoder Int32 where encodeOnto sc v = sc :< show v
51 | TSVEncoder Int64 where encodeOnto sc v = sc :< show v
54 | TSVEncoder Int where encodeOnto sc v = sc :< show v
57 | TSVEncoder Integer where encodeOnto sc v = sc :< show v
60 | TSVEncoder Nat where encodeOnto sc v = sc :< show v
63 | TSVEncoder String where encodeOnto sc v = sc :< v
66 | TSVEncoder Double where encodeOnto sc v = sc :< show v
69 | TSVEncoder Bool where encodeOnto sc v = sc :< show v
76 | TSVEncoder a => TSVEncoder (Maybe a) where
77 | encodeOnto sc Nothing = sc :< ""
78 | encodeOnto sc (Just v) = encodeOnto sc v
81 | TSVEncoder a => TSVEncoder b => TSVEncoder (a,b) where
82 | encodeOnto sc (va, vb) = encodeOnto (encodeOnto sc va) vb
90 | -> {auto _ : All (TSVEncoder . f) ks}
95 | encAll @{_ :: _} ss (v::vs) = encAll (encodeOnto ss v) vs
99 | -> {auto _ : All (TSVEncoder . f) ks}
104 | encAllV @{_ :: _} ss (v::vs) = encAllV (encodeOnto ss v) vs
107 | All (TSVEncoder . f) ks => TSVEncoder (LQ.All.All f ks) where
108 | encodeOnto sc vs = encAll sc vs
111 | All (TSVEncoder . f) ks => TSVEncoder (VQ.All.All f ks) where
112 | encodeOnto sc vs = encAllV sc vs
119 | toRow : TSVEncoder a => a -> String
121 | let ss := encodeOnto [<] v <>> []
122 | in concat $
intersperse "\t" ss
125 | toTable : TSVEncoder a => List a -> String
126 | toTable = unlines . map toRow