// Package codec defines processes to convert between different representations // of lambda calculus, and serialize the different representations. package codec // A Conversion is a function that turns one representation into another. // Returns an error if the input expression cannot be converted. type Conversion[T, U any] = func(T) (U, error) // A Codec is an object that can serialize/deserialize one type of // representation. It is assumed that for any x ∋ T, Decode(Encode(x)) = x. type Codec[T any] interface { // Encode takes an expression, and returns its serialized format, as a // string. Returns an error if the expression cannot be serialized. Encode(T) (string, error) // Decode takes the serialized format of an expression, and returns its true // value. Returns an error if the string doesn't correctly represent any // valid expression. Decode(string) (T, error) }