# Documentation

`Algebraic`

refers to a type with an algebraic representation, armed with methods to convert in each direction.
`toAlg`

and `fromAlg`

should preserve equality and ordering.

Algebraic Bool | |

Algebraic Char | |

Algebraic Double | |

Algebraic Float | |

Algebraic Int | |

Algebraic Rational | |

Algebraic () | |

Algebraic IntSet | |

Algebraic k => Algebraic [k] | |

Algebraic a => Algebraic (Maybe a) | |

Algebraic v => Algebraic (IntMap v) | |

Algebraic a => Algebraic (Set a) | |

(Algebraic k1, Algebraic k2) => Algebraic (Either k1 k2) | |

(Algebraic k1, Algebraic k2) => Algebraic (k1, k2) | |

(Algebraic k, Algebraic v) => Algebraic (Map k v) | |

(Algebraic a, Algebraic b, Algebraic c) => Algebraic (a, b, c) | |

(Ord k, Algebraic k, Algebraic v, TrieKey k m) => Algebraic (RadixTrie k m v) | |

(Algebraic (m1 v), Algebraic (m2 v)) => Algebraic (UnionMap m1 m2 v) | |

Algebraic (m1 (m2 v)) => Algebraic (ProdMap m1 m2 v) | |

(Algebraic k, Algebraic a, TrieKey (Alg k) m) => Algebraic (TrieMap k m a) | |

(Algebraic a, Algebraic b, Algebraic c, Algebraic d) => Algebraic (a, b, c, d) | |

(Algebraic a, Algebraic b, Algebraic c, Algebraic d, Algebraic e) => Algebraic (a, b, c, d, e) |