X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=gCons.icl;h=6e5aaa52d14b48efc5685f319005e369559605dc;hb=3c4bbb3cae00cb810107b39b99b8118e9e458a34;hp=34461160955259db81124e793aec95096ce2cd23;hpb=48dfd7ad2f104321657a3ea44d33340761c95c2e;p=mTask.git diff --git a/gCons.icl b/gCons.icl index 3446116..6e5aaa5 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 @@ -22,6 +22,7 @@ consName{|Int|} i = toString i consName{|Bool|} b = toString b consName{|Char|} c = toString c consName{|String|} s = s +consName{|[]|} _ _ = "[]" consName{|(->)|} f g x = g (x undef) generic consIndex a :: a -> Int @@ -35,3 +36,26 @@ consIndex{|Int|} i = i consIndex{|Bool|} b = if b 1 0 consIndex{|Char|} c = toInt c consIndex{|String|} _ = 0 +consIndex{|[]|} _ _ = 0 + +generic conses a :: [a] +conses{|CONS|} f = [CONS (hd f)] +conses{|UNIT|} = [UNIT] +conses{|PAIR|} f g = [] +conses{|EITHER|} f g = map LEFT f ++ map RIGHT g +conses{|OBJECT|} f = map OBJECT f +conses{|RECORD|} f = map RECORD f +conses{|FIELD|} f = map FIELD f +conses{|Int|} = [0] +conses{|Bool|} = [True] +conses{|Char|} = ['\0'] +conses{|Real|} = [0.0] +conses{|String|} = [""] +conses{|[]|} _ = [[ ]] +conses{|[!]|} _ = [[!]] +conses{|[ !]|} _ = [[ !]] +conses{|[!!]|} _ = [[!!]] +conses{|{}|} _ = [{}] +conses{|{!}|} _ = [{!}] +conses{|()|} = [()] +conses{|(->)|} _ _ = [const undef]