module test import StdList, StdEnum import StdGeneric generic gFDomain a :: [a] gFDomain{|Bool|} = [False,True] gFDomain{|Char|} = map toChar [0..255] gFDomain{|UNIT|} = [UNIT] gFDomain{|PAIR|} dx dy = [PAIR x y \\ x <- dx, y <- dy] gFDomain{|EITHER|} dx dy = map LEFT dx ++ map RIGHT dy gFDomain{|CONS|} dx = [CONS x\\x<-dx] gFDomain{|FIELD|} dx = [FIELD x\\x<-dx] gFDomain{|OBJECT|} dx = [OBJECT x\\x<-dx] derive bimap [] derive gFDomain T :: T = S T | Z Start = hd [() \\ _ <- dom] dom :: [T] dom = gFDomain{|*|}