view record.ur @ 23:9d6b931fbd13

Implement JSON type class for recursive datatypes, using Mu combinator.
author Edward Z. Yang <ezyang@mit.edu>
date Wed, 02 May 2012 11:47:37 -0400
parents 6cd839818393
children f55f66c6fdee
line wrap: on
line source
fun numFields [r ::: {Type}] (fl : folder r) (r : $r) : int =
    @fold [fn _ => int] (fn [nm ::_] [u ::_] [r ::_] [[nm] ~ r] acc => acc+1) 0 fl

fun mem [a ::: Type] [ns ::: {Unit}] (_ : eq a) (fl : folder ns) (x : a) (r : $(mapU a ns)) : bool =
    @foldUR [a] [fn _ => bool]
     (fn [nm ::_] [r ::_] [[nm] ~ r] y acc =>
         acc || x = y)
     False fl r

fun equal [ts ::: {Type}] (eqs : $(map eq ts)) (fl : folder ts) (r1 : $ts) (r2 : $ts) : bool =
    @foldR3 [eq] [ident] [ident] [fn _ => bool]
     (fn [nm ::_] [t ::_] [r ::_] [[nm] ~ r] isEq x y acc =>
         acc && @eq isEq x y)
     True fl eqs r1 r2