summaryrefslogtreecommitdiff
path: root/src/Example.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Example.hs')
-rw-r--r--src/Example.hs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/Example.hs b/src/Example.hs
index c8f12ba..f2e5966 100644
--- a/src/Example.hs
+++ b/src/Example.hs
@@ -58,3 +58,39 @@ ex2 =
(bin (OAdd STF32)
(EVar ext (STScal STF32) IZ)
(EVar ext (STScal STF32) (IS (IS IZ))))
+
+-- x y |- if x < y then 2 * x else 3 + x
+ex3 :: Ex [TScal TF32, TScal TF32] (TScal TF32)
+ex3 =
+ ECase ext (EOp ext OIf (bin (OLt STF32) (EVar ext (STScal STF32) (IS IZ))
+ (EVar ext (STScal STF32) IZ)))
+ (bin (OMul STF32) (EConst ext STF32 2.0)
+ (EVar ext (STScal STF32) (IS (IS IZ))))
+ (bin (OAdd STF32) (EConst ext STF32 3.0)
+ (EVar ext (STScal STF32) (IS (IS IZ))))
+
+-- x y |- if x < y then 2 * x + y * y else 3 + x
+ex4 :: Ex [TScal TF32, TScal TF32] (TScal TF32)
+ex4 =
+ ECase ext (EOp ext OIf (bin (OLt STF32) (EVar ext (STScal STF32) (IS IZ))
+ (EVar ext (STScal STF32) IZ)))
+ (bin (OAdd STF32)
+ (bin (OMul STF32) (EConst ext STF32 2.0)
+ (EVar ext (STScal STF32) (IS (IS IZ))))
+ (bin (OMul STF32) (EVar ext (STScal STF32) (IS IZ))
+ (EVar ext (STScal STF32) (IS IZ))))
+ (bin (OAdd STF32) (EConst ext STF32 3.0)
+ (EVar ext (STScal STF32) (IS (IS IZ))))
+
+senv5 :: SList STy [TScal TF32, TEither (TScal TF32) (TScal TF32)]
+senv5 = STScal STF32 `SCons` STEither (STScal STF32) (STScal STF32) `SCons` SNil
+
+-- x:R+R y:R |- case x of {inl a -> a * y ; inr b -> b * (y + 1)}
+ex5 :: Ex [TScal TF32, TEither (TScal TF32) (TScal TF32)] (TScal TF32)
+ex5 =
+ ECase ext (EVar ext (STEither (STScal STF32) (STScal STF32)) (IS IZ))
+ (bin (OMul STF32) (EVar ext (STScal STF32) IZ)
+ (EVar ext (STScal STF32) (IS IZ)))
+ (bin (OMul STF32) (EVar ext (STScal STF32) IZ)
+ (bin (OAdd STF32) (EVar ext (STScal STF32) (IS IZ))
+ (EConst ext STF32 1.0)))