From ec87ed49f84148b7f9fca00ca98f23e3ae0e8b9c Mon Sep 17 00:00:00 2001 From: crumbtoo Date: Fri, 24 Nov 2023 14:59:21 -0700 Subject: [PATCH] implement corePrelude in core language --- src/Core/Examples.hs | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/Core/Examples.hs b/src/Core/Examples.hs index 0911567..209c15e 100644 --- a/src/Core/Examples.hs +++ b/src/Core/Examples.hs @@ -107,19 +107,25 @@ listExample3 = [coreProg| |] corePrelude :: Module -corePrelude = Module (Just ("Prelude", [])) $ Program - [ ScDef "id" ["x"] $ "x" - , ScDef "k" ["x", "y"] $ "x" - , ScDef "k1" ["x", "y"] $ "y" - , ScDef "succ" ["f", "g", "x"] $ "f" :$ "x" :$ ("g" :$ "x") - , ScDef "compose" ["f", "g", "x"] $ "f" :$ ("g" :$ "x") - , ScDef "twice" ["f", "x"] $ "f" :$ ("f" :$ "x") - , ScDef "False" [] $ Con 0 0 - , ScDef "True" [] $ Con 1 0 - , ScDef "MkPair" [] $ Con 0 2 - , ScDef "fst" ["p"] $ "casePair#" :$ "p" :$ "k" - , ScDef "snd" ["p"] $ "casePair#" :$ "p" :$ "k1" - , ScDef "Nil" [] $ Con 1 0 - , ScDef "Cons" [] $ Con 2 2 - ] +corePrelude = Module (Just ("Prelude", [])) $ + -- non-primitive defs + [coreProg| + id x = x; + k x y = x; + k1 x y = y; + succ f g x = f x (g x); + compose f g x = f (g x); + twice f x = f (f x); + fst p = casePair# p k; + snd p = casePair# p k1; + |] + <> + -- primitive constructors need some specialised wiring: + Program + [ ScDef "False" [] $ Con 0 0 + , ScDef "True" [] $ Con 1 0 + , ScDef "MkPair" [] $ Con 0 2 + , ScDef "Nil" [] $ Con 1 0 + , ScDef "Cons" [] $ Con 2 2 + ]