 The Cayenne implementation was written in Haskell, and it also translated to Haskell, but is currently no longer being maintained.The main aim with Cayenne is not to use the types to express specifications (although this can be done), but rather to use the type system to give type to more functions.An example of a function that can be given a type in Cayenne is codice_1.