• chak@cse.unsw.edu.au.'s avatar
    Deriving for indexed data types · 380512de
    chak@cse.unsw.edu.au. authored
    - This patch implements deriving clauses for data instance declarations
      (toplevel and associated)
    - Doesn't support standalone deriving.  This could be easily supported,
      but requires an extension of the syntax of standalone deriving clauses.
      Björn, fancy adding this?
    - We cannot derive Typeable.  This seems a problem of notation, more than 
      anything else.  Why?  For a binary vanilla data type "T a b", we would 
      generate an instance Typeable2 T; ie, the instance is for the constructor
      alone.  In the case of a family instance, such as (S [a] (Maybe b)), we
      simply have no means to denote the associated constuctor.  It appears to
      require type level lambda - something like (/\a b. S [a] (Maybe b).
    - Derivings are for *individual* family *instances*, not for entire families.
      Currently, I know of no simple translation of class instances for entire 
      families to System F_C.  This actually seems to be similar to implementing
      open data types à la Löh & Hinze.
    - This patch only covers data types, not newtypes.
Type.lhs 51.5 KB