▁Show ▁makes ▁their ▁methods ▁== ▁and ▁show ▁generic ▁in ▁a ▁qual it atively ▁different ▁way ▁from ▁para - met r ically ▁polym orph ic ▁functions : ▁these ▁" functions " ▁( more ▁accur ately , ▁type - index ed ▁families ▁of ▁functions ) ▁can ▁be ▁applied ▁to ▁values ▁of ▁various ▁types , ▁and ▁although ▁they ▁behave ▁differently ▁for ▁every ▁argument ▁type , ▁little ▁work ▁is ▁needed ▁to ▁add ▁support ▁for ▁a ▁new ▁type . ▁R alf ▁Hin ze ▁( 2 0 0 4 ) ▁has ▁shown ▁that ▁a ▁similar ▁effect ▁can ▁be ▁achieved ▁for ▁user - defined ▁type ▁classes ▁by ▁certain ▁programming ▁techniques . ▁Other ▁research ers ▁have ▁proposed ▁approaches ▁to ▁this ▁and ▁other ▁kinds ▁of ▁generic ity ▁in ▁the ▁context ▁of ▁H askell ▁and ▁extensions ▁to ▁H askell ▁( dis cuss ed ▁below ). ▁ ▁Poly P ▁ ▁Poly P ▁was ▁the ▁first ▁generic ▁programming ▁language ▁extension ▁to ▁H askell . ▁In ▁Poly P , ▁generic ▁functions ▁are ▁called ▁poly ty pic . ▁The ▁language ▁introdu ces ▁a ▁special ▁construct ▁in ▁which ▁such ▁poly ty pic ▁functions ▁can ▁be ▁defined ▁via ▁struct ural ▁induction ▁over ▁the ▁structure ▁of ▁the ▁pattern ▁fun ctor ▁of ▁a ▁regular ▁dat atype . ▁Reg ular ▁dat at ypes ▁in ▁Poly P ▁are ▁a ▁subset ▁of ▁H askell ▁dat at ypes . ▁A ▁regular ▁dat atype ▁t ▁must ▁be ▁of ▁kind ▁* ▁→ ▁* , ▁and ▁if ▁a ▁is ▁the ▁formal ▁type ▁argument ▁in ▁the ▁definition , ▁then ▁all ▁recursive ▁calls ▁to ▁t ▁must ▁have ▁the ▁form ▁t