| 77 | | * If all type constructors `S` mentioned in `T`'s definiton have `tyConCC S == AsIsCC`, we do not convert `T` and set its `tyConCC` field to `AsIsCC` as well. (NB: This implies that `T` does not mention any function arrows.) |
| 78 | | * Otherwise, generate a converted type declaration `T_CC` together two conversion functions `fr_T` and `to_T`, and set |
| 79 | | `tyConCC` to `ConvCC (T_CC, fr_T, to_T)`. |
| 80 | | Note that basic types, such as `Int` and friends, should have `tyConCC` set to `AsIsCC`. |
| | 77 | * If all type constructors `S` mentioned in `T`'s definiton have `tyConCC S == ConvCC S`, we do not convert `T` and set its `tyConCC` field to `ConvCC (T, isoT)` generating a suitable conversion constructor `isoT`. (NB: This implies that `T` does not mention any function arrows.) |
| | 78 | * Otherwise, we generate a converted type declaration `T_CC` together a conversion constructor `isoT`, and set |
| | 79 | `tyConCC` to `ConvCC (T_CC, isoT)`. |
| | 80 | Note that basic types, such as `Int` and friends, should have `tyConCC` set to `ConvCC (Int, isoInt)` with identity conversions `isoInt = id :<->: id. |