From 899b1823b1b5cd5d2d9f29439238b92756d4e536 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Sun, 16 Jul 2017 19:30:41 -0400 Subject: - Polytypic JSON codec can now handle #rec-style recursive types. --- stdlib/test/test/lux/data/format/json.lux | 22 +++++++++++++++++++--- stdlib/test/test/lux/macro/poly/eq.lux | 2 -- 2 files changed, 19 insertions(+), 5 deletions(-) (limited to 'stdlib/test') diff --git a/stdlib/test/test/lux/data/format/json.lux b/stdlib/test/test/lux/data/format/json.lux index fc533e4c1..eba3b4cf9 100644 --- a/stdlib/test/test/lux/data/format/json.lux +++ b/stdlib/test/test/lux/data/format/json.lux @@ -7,7 +7,7 @@ pipe) (data [text "Text/" Monoid] text/format - [result] + ["R" result] [bool] [maybe] [number "i/" Number] @@ -18,7 +18,8 @@ [macro #+ with-gensyms] (macro [code] [syntax #+ syntax:] - [poly #+ derived:]) + [poly #+ derived:] + [poly/eq]) ["r" math/random] test) ) @@ -59,6 +60,10 @@ (#Case1 Int) (#Case2 Real)) +(type: #rec Recursive + (#Number Real) + (#Addition Real Recursive)) + (type: Record {#unit Unit #bool Bool @@ -69,7 +74,16 @@ #list (List Int) #variant Variant #tuple [Int Real Text] - #dict (d;Dict Text Int)}) + #dict (d;Dict Text Int) + #recursive Recursive}) + +(def: gen-recursive + (r;Random Recursive) + (r;rec (function [gen-recursive] + (r;alt r;real + (r;seq r;real gen-recursive))))) + +(derived: (poly/eq;Eq Recursive)) (def: gen-record (r;Random Record) @@ -87,6 +101,7 @@ ($_ r;alt r;bool gen-int r;real) ($_ r;seq gen-int r;real (r;text size)) (r;dict text;Hash size (r;text size) gen-int) + gen-recursive ))) (derived: (&;Codec Record)) @@ -119,6 +134,7 @@ (r.= tL1 tR1) (:: text;Eq = tL2 tR2))) (:: (d;Eq i.=) = (get@ #dict recL) (get@ #dict recR)) + (:: Eq = (get@ #recursive recL) (get@ #recursive recR)) )))) (context: "Polytypism" diff --git a/stdlib/test/test/lux/macro/poly/eq.lux b/stdlib/test/test/lux/macro/poly/eq.lux index 9bd6fc5e6..8bd102823 100644 --- a/stdlib/test/test/lux/macro/poly/eq.lux +++ b/stdlib/test/test/lux/macro/poly/eq.lux @@ -41,8 +41,6 @@ (r;alt r;real (r;seq r;real gen-recursive))))) -(derived: (&;Eq Recursive)) - (def: gen-record (r;Random Record) (do r;Monad -- cgit v1.2.3