0 | module Derive.Refined.TSV
2 | import public Derive.Refined
3 | import public Derive.TSV
4 | import Language.Reflection.Util
13 | refinedEncDef : (fun : Name) -> (p : ParamTypeInfo) -> RefinedInfo p -> Decl
14 | refinedEncDef fun (MkParamTypeInfo _ _ _ [c] _) (RI x) =
15 | def fun [patClause `(~(var fun) sc
) `(encodeOnto sc .
~(var $
valName c.args x))]
20 | RefinedTSVEncoderVis : Visibility -> List Name -> ParamTypeInfo -> Res (List TopLevel)
21 | RefinedTSVEncoderVis vis ns p = map decls $
refinedInfo p
24 | decls : RefinedInfo p -> List TopLevel
26 | let fun := funName p "encodeOnto"
27 | impl := implName p "TSVEncoder"
28 | in [ TL (encClaim vis fun p) (refinedEncDef fun p ri)
29 | , TL (encoderImplClaim vis impl p) (encoderImplDef fun impl)
35 | RefinedTSVEncoder : List Name -> ParamTypeInfo -> Res (List TopLevel)
36 | RefinedTSVEncoder = RefinedTSVEncoderVis Export
43 | refinedDecDef : (fun, refineName : Name) -> Decl
44 | refinedDecDef fun rn =
45 | def fun [patClause (var fun) `(refine decodeFrom
~(var rn))]
50 | RefinedTSVDecoderVis :
54 | -> Res (List TopLevel)
55 | RefinedTSVDecoderVis vis ns p = map decls $
refinedInfo p
58 | decls : RefinedInfo p -> List TopLevel
60 | let fun := funName p "decodeFrom"
61 | impl := implName p "TSVDecoder"
62 | refn := refineName p
63 | in [ TL (decClaim vis fun p) (refinedDecDef fun refn)
64 | , TL (decoderImplClaim vis impl p) (decoderImplDef fun impl)
70 | RefinedTSVDecoder : List Name -> ParamTypeInfo -> Res (List TopLevel)
71 | RefinedTSVDecoder = RefinedTSVDecoderVis Export
80 | RefinedTSV : List Name -> ParamTypeInfo -> Res (List TopLevel)
81 | RefinedTSV ns p = sequenceJoin [RefinedTSVEncoder ns p, RefinedTSVDecoder ns p]