adam@11: val numFields : r ::: {Type} -> folder r -> $r -> int adam@11: adam@10: val mem : a ::: Type -> ns ::: {Unit} -> eq a -> folder ns -> a -> $(mapU a ns) -> bool adam@10: (* Is a value found in a record? *) adam@12: adam@12: val equal : ts ::: {Type} -> $(map eq ts) -> folder ts -> $ts -> $ts -> bool adam@12: (* Are two records equal? *) ezyang@28: ezyang@28: (* Analogous to applicative ap e.g. <*>, of type [f (a -> b) -> f a -> f b] *) ezyang@28: val ap : K --> tf1 :: (K -> Type) -> tf2 :: (K -> Type) ezyang@28: -> r ::: {K} -> folder r ezyang@28: -> $(map (fn t => tf1 t -> tf2 t) r) ezyang@28: -> $(map tf1 r) ezyang@28: -> $(map tf2 r)