Module Lib.Encodings

type ('oh, 'u, 'p) encoding = {
  1. encode : 'u -> 'p repr;
  2. decode : 'p repr -> 'u;
  3. input : 'oh -> 'p Input.t;
  4. of_input : 'p Input.t -> 'oh;
}
val conv : ('u1 -> 'u0) -> ('u0 -> 'u1) -> ('o1 -> 'o0) -> ('o0 -> 'o1) -> ('o0, 'u0, 'p) encoding -> ('o1, 'u1, 'p) encoding
val with_implicit_bool_check : ('p repr -> bool repr t) -> ('o, 'u, 'p) encoding -> ('o, 'u, 'p) encoding
val with_assertion : ('p repr -> unit repr t) -> ('o, 'u, 'p) encoding -> ('o, 'u, 'p) encoding
val scalar_encoding : (Csir.Scalar.t, scalar repr, scalar) encoding

Encoding combinators

val bool_encoding : (bool, bool repr, bool) encoding
val list_encoding : ('a, 'b, 'c) encoding -> ('d list, 'e list, 'f list) encoding
val atomic_list_encoding : ('a, 'b repr, 'c) encoding -> ('a list, 'b list repr, 'c list) encoding
val obj2_encoding : ('a, 'b, 'c) encoding -> ('d, 'e, 'f) encoding -> ('g * 'h, 'i * 'j, 'k * 'l) encoding
val atomic_obj2_encoding : ('a, 'b repr, 'c) encoding -> ('d, 'e repr, 'f) encoding -> ('a * 'd, ('b * 'e) repr, 'c * 'f) encoding
val obj3_encoding : ('a, 'b, 'c) encoding -> ('d, 'e, 'f) encoding -> ('g, 'h, 'i) encoding -> ('a * ('d * 'g), 'b * ('e * 'h), 'c * ('f * 'i)) encoding
val atomic_obj3_encoding : ('a, 'b repr, 'c) encoding -> ('d, 'e repr, 'f) encoding -> ('g, 'h repr, 'i) encoding -> ('a * ('d * 'g), ('b * ('e * 'h)) repr, 'c * ('f * 'i)) encoding
val obj4_encoding : ('a, 'b, 'c) encoding -> ('d, 'e, 'f) encoding -> ('g, 'h, 'i) encoding -> ('j, 'k, 'l) encoding -> ('a * ('d * ('g * 'j)), 'b * ('e * ('h * 'k)), 'c * ('f * ('i * 'l))) encoding
val atomic_obj4_encoding : ('a, 'b repr, 'c) encoding -> ('d, 'e repr, 'f) encoding -> ('g, 'h repr, 'i) encoding -> ('j, 'k repr, 'l) encoding -> ('a * ('d * ('g * 'j)), ('b * ('e * ('h * 'k))) repr, 'c * ('f * ('i * 'l))) encoding
val obj5_encoding : ('a, 'b, 'c) encoding -> ('d, 'e, 'f) encoding -> ('g, 'h, 'i) encoding -> ('j, 'k, 'l) encoding -> ('m, 'n, 'o) encoding -> ('a * ('d * ('g * ('j * 'm))), 'b * ('e * ('h * ('k * 'n))), 'c * ('f * ('i * ('l * 'o)))) encoding
val atomic_obj5_encoding : ('a, 'b repr, 'c) encoding -> ('d, 'e repr, 'f) encoding -> ('g, 'h repr, 'i) encoding -> ('j, 'k repr, 'l) encoding -> ('m, 'n repr, 'o) encoding -> ('a * ('d * ('g * ('j * 'm))), ('b * ('e * ('h * ('k * 'n)))) repr, 'c * ('f * ('i * ('l * 'o)))) encoding
val obj6_encoding : ('a, 'b, 'c) encoding -> ('d, 'e, 'f) encoding -> ('g, 'h, 'i) encoding -> ('j, 'k, 'l) encoding -> ('m, 'n, 'o) encoding -> ('p, 'q, 'r) encoding -> ('a * ('d * ('g * ('j * ('m * 'p)))), 'b * ('e * ('h * ('k * ('n * 'q)))), 'c * ('f * ('i * ('l * ('o * 'r))))) encoding
val atomic_obj6_encoding : ('a, 'b repr, 'c) encoding -> ('d, 'e repr, 'f) encoding -> ('g, 'h repr, 'i) encoding -> ('j, 'k repr, 'l) encoding -> ('m, 'n repr, 'o) encoding -> ('p, 'q repr, 'r) encoding -> ('a * ('d * ('g * ('j * ('m * 'p)))), ('b * ('e * ('h * ('k * ('n * 'q))))) repr, 'c * ('f * ('i * ('l * ('o * 'r))))) encoding
val obj7_encoding : ('a, 'b, 'c) encoding -> ('d, 'e, 'f) encoding -> ('g, 'h, 'i) encoding -> ('j, 'k, 'l) encoding -> ('m, 'n, 'o) encoding -> ('p, 'q, 'r) encoding -> ('s, 't, 'u) encoding -> ('a * ('d * ('g * ('j * ('m * ('p * 's))))), 'b * ('e * ('h * ('k * ('n * ('q * 't))))), 'c * ('f * ('i * ('l * ('o * ('r * 'u)))))) encoding
val atomic_obj7_encoding : ('a, 'b repr, 'c) encoding -> ('d, 'e repr, 'f) encoding -> ('g, 'h repr, 'i) encoding -> ('j, 'k repr, 'l) encoding -> ('m, 'n repr, 'o) encoding -> ('p, 'q repr, 'r) encoding -> ('s, 't repr, 'u) encoding -> ('a * ('d * ('g * ('j * ('m * ('p * 's))))), ('b * ('e * ('h * ('k * ('n * ('q * 't)))))) repr, 'c * ('f * ('i * ('l * ('o * ('r * 'u)))))) encoding
val obj8_encoding : ('a, 'b, 'c) encoding -> ('d, 'e, 'f) encoding -> ('g, 'h, 'i) encoding -> ('j, 'k, 'l) encoding -> ('m, 'n, 'o) encoding -> ('p, 'q, 'r) encoding -> ('s, 't, 'u) encoding -> ('v, 'w, 'x) encoding -> ('a * ('d * ('g * ('j * ('m * ('p * ('s * 'v)))))), 'b * ('e * ('h * ('k * ('n * ('q * ('t * 'w)))))), 'c * ('f * ('i * ('l * ('o * ('r * ('u * 'x))))))) encoding
val atomic_obj8_encoding : ('a, 'b repr, 'c) encoding -> ('d, 'e repr, 'f) encoding -> ('g, 'h repr, 'i) encoding -> ('j, 'k repr, 'l) encoding -> ('m, 'n repr, 'o) encoding -> ('p, 'q repr, 'r) encoding -> ('s, 't repr, 'u) encoding -> ('v, 'w repr, 'x) encoding -> ('a * ('d * ('g * ('j * ('m * ('p * ('s * 'v)))))), ('b * ('e * ('h * ('k * ('n * ('q * ('t * 'w))))))) repr, 'c * ('f * ('i * ('l * ('o * ('r * ('u * 'x))))))) encoding
val obj9_encoding : ('a, 'b, 'c) encoding -> ('d, 'e, 'f) encoding -> ('g, 'h, 'i) encoding -> ('j, 'k, 'l) encoding -> ('m, 'n, 'o) encoding -> ('p, 'q, 'r) encoding -> ('s, 't, 'u) encoding -> ('v, 'w, 'x) encoding -> ('y, 'z, 'a1) encoding -> ('a * ('d * ('g * ('j * ('m * ('p * ('s * ('v * 'y))))))), 'b * ('e * ('h * ('k * ('n * ('q * ('t * ('w * 'z))))))), 'c * ('f * ('i * ('l * ('o * ('r * ('u * ('x * 'a1)))))))) encoding
val atomic_obj9_encoding : ('a, 'b repr, 'c) encoding -> ('d, 'e repr, 'f) encoding -> ('g, 'h repr, 'i) encoding -> ('j, 'k repr, 'l) encoding -> ('m, 'n repr, 'o) encoding -> ('p, 'q repr, 'r) encoding -> ('s, 't repr, 'u) encoding -> ('v, 'w repr, 'x) encoding -> ('y, 'z repr, 'a1) encoding -> ('a * ('d * ('g * ('j * ('m * ('p * ('s * ('v * 'y))))))), ('b * ('e * ('h * ('k * ('n * ('q * ('t * ('w * 'z)))))))) repr, 'c * ('f * ('i * ('l * ('o * ('r * ('u * ('x * 'a1)))))))) encoding
val obj10_encoding : ('a, 'b, 'c) encoding -> ('d, 'e, 'f) encoding -> ('g, 'h, 'i) encoding -> ('j, 'k, 'l) encoding -> ('m, 'n, 'o) encoding -> ('p, 'q, 'r) encoding -> ('s, 't, 'u) encoding -> ('v, 'w, 'x) encoding -> ('y, 'z, 'a1) encoding -> ('b1, 'c1, 'd1) encoding -> ('a * ('d * ('g * ('j * ('m * ('p * ('s * ('v * ('y * 'b1)))))))), 'b * ('e * ('h * ('k * ('n * ('q * ('t * ('w * ('z * 'c1)))))))), 'c * ('f * ('i * ('l * ('o * ('r * ('u * ('x * ('a1 * 'd1))))))))) encoding
val atomic_obj10_encoding : ('a, 'b repr, 'c) encoding -> ('d, 'e repr, 'f) encoding -> ('g, 'h repr, 'i) encoding -> ('j, 'k repr, 'l) encoding -> ('m, 'n repr, 'o) encoding -> ('p, 'q repr, 'r) encoding -> ('s, 't repr, 'u) encoding -> ('v, 'w repr, 'x) encoding -> ('y, 'z repr, 'a1) encoding -> ('b1, 'c1 repr, 'd1) encoding -> ('a * ('d * ('g * ('j * ('m * ('p * ('s * ('v * ('y * 'b1)))))))), ('b * ('e * ('h * ('k * ('n * ('q * ('t * ('w * ('z * 'c1))))))))) repr, 'c * ('f * ('i * ('l * ('o * ('r * ('u * ('x * ('a1 * 'd1))))))))) encoding