X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=gCons.icl;h=6ed064d4d966d43d432313dc91ee82273d823a87;hb=fe2e0f56c77de00d25686ab0b583a40595b35ab8;hp=34461160955259db81124e793aec95096ce2cd23;hpb=48dfd7ad2f104321657a3ea44d33340761c95c2e;p=mTask.git diff --git a/gCons.icl b/gCons.icl index 3446116..6ed064d 100644 --- a/gCons.icl +++ b/gCons.icl @@ -7,7 +7,7 @@ implementation module gCons ARDSL project */ -import StdEnv, StdGeneric +import StdEnv, StdGeneric, GenBimap, _SystemStrictLists generic consName a :: a -> String consName{|CONS of {gcd_name}|} f x = gcd_name @@ -35,3 +35,30 @@ consIndex{|Int|} i = i consIndex{|Bool|} b = if b 1 0 consIndex{|Char|} c = toInt c consIndex{|String|} _ = 0 + +import StdMisc, StdDebug + +conses :: [a] | gconses{|*|} a +conses = gconses{|*|} True + +generic gconses a :: Bool -> [a] +gconses{|CONS|} f True = map CONS (f False) +gconses{|CONS|} f b = [CONS (hd (f b))] +gconses{|UNIT|} _ = [UNIT] +gconses{|PAIR|} f g _ = [] +gconses{|EITHER|} f g b = map LEFT (f b) ++ map RIGHT (g b) +gconses{|OBJECT|} f b = map OBJECT (f b) +gconses{|RECORD|} f b = map RECORD (f b) +gconses{|FIELD|} f b = map FIELD (f b) +gconses{|Int|} _ = [0] +gconses{|Bool|} _ = [True] +gconses{|Char|} _ = ['\0'] +gconses{|Real|} _ = [0.0] +gconses{|String|} _ = [""] +gconses{|[]|} _ _ = [[ ]] +gconses{|[!]|} _ _ = [[!]] +gconses{|[ !]|} _ _ = [[ !]] +gconses{|[!!]|} _ _ = [[!!]] +gconses{|{}|} _ _ = [{}] +gconses{|{!}|} _ _ = [{!}] +gconses{|()|} _ = [()]