implementation module gCons /* Pieter Koopman 2015 pieter@cs.ru.nl Radboud University, Nijmegen, The Netherlands ARDSL project */ import StdEnv, StdGeneric generic consName a :: a -> String consName{|CONS of {gcd_name}|} f x = gcd_name consName{|UNIT|} _ = "UNIT" consName{|PAIR|} f g (PAIR x y) = f x consName{|EITHER|} f g (LEFT x) = f x consName{|EITHER|} f g (RIGHT y) = g y consName{|OBJECT|} f (OBJECT x) = f x consName{|RECORD|} f (RECORD x) = f x consName{|FIELD|} f (FIELD x) = f x consName{|Int|} i = toString i consName{|Bool|} b = toString b consName{|Char|} c = toString c consName{|(->)|} f g x = g (x undef) generic consIndex a :: a -> Int consIndex{|CONS of {gcd_index}|} f x = gcd_index consIndex{|UNIT|} _ = 0 consIndex{|PAIR|} f g (PAIR x y) = f x consIndex{|EITHER|} f g (LEFT x) = f x consIndex{|EITHER|} f g (RIGHT y) = g y consIndex{|OBJECT|} f (OBJECT x) = f x consIndex{|Int|} i = i consIndex{|Bool|} b = if b 1 0 consIndex{|Char|} c = toInt c