// pub opaque type Dict { // inner: List>, // } // pub fn constant(a: a) -> Fuzzer { // fn(s0) { Some((s0, a)) } // } // pub fn map(fuzz_a: Fuzzer, f: fn(a) -> b) -> Fuzzer { // fn(s0) { // when fuzz_a(s0) is { // Some((s1, a)) -> Some((s1, f(a))) // None -> None // } // } // } // // NOTE: Inlining `do_list` fixes the problem. But the indirection here causes: // // // // --> Type mismatch expected 'pair data data' got 'data' // pub fn list(fuzzer: Fuzzer) -> Fuzzer> { // do_list(fuzzer, []) // } // fn do_list(fuzzer, xs) -> Fuzzer> { // let x <- map(fuzzer) // [x, ..xs] // } // pub fn dict() -> Fuzzer> { // list(constant(Pair(1, True))) // |> map(fn(inner) { Dict { inner } }) // } // test prop_dict_between(_d via dict()) { // True // }