summaryrefslogtreecommitdiff
path: root/src/CHAD
diff options
context:
space:
mode:
Diffstat (limited to 'src/CHAD')
-rw-r--r--src/CHAD/Heuristics.hs14
-rw-r--r--src/CHAD/Types.hs14
2 files changed, 28 insertions, 0 deletions
diff --git a/src/CHAD/Heuristics.hs b/src/CHAD/Heuristics.hs
new file mode 100644
index 0000000..6ab8222
--- /dev/null
+++ b/src/CHAD/Heuristics.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE GADTs #-}
+module CHAD.Heuristics where
+
+import AST
+
+
+hasArrays :: STy t' -> Bool
+hasArrays STNil = False
+hasArrays (STPair a b) = hasArrays a || hasArrays b
+hasArrays (STEither a b) = hasArrays a || hasArrays b
+hasArrays (STMaybe t) = hasArrays t
+hasArrays STArr{} = True
+hasArrays STScal{} = False
+hasArrays STAccum{} = error "Accumulators not allowed in source program"
diff --git a/src/CHAD/Types.hs b/src/CHAD/Types.hs
index 0b73a3a..130493d 100644
--- a/src/CHAD/Types.hs
+++ b/src/CHAD/Types.hs
@@ -68,3 +68,17 @@ d2 STAccum{} = error "Accumulators not allowed in input program"
d2e :: SList STy env -> SList STy (D2E env)
d2e SNil = SNil
d2e (SCons t ts) = SCons (d2 t) (d2e ts)
+
+
+data CHADConfig = CHADConfig
+ { -- | D[let] will bind variables containing arrays in accumulator mode.
+ chcLetArrayAccum :: Bool
+ , -- | D[case] will bind variables containing arrays in accumulator mode.
+ chcCaseArrayAccum :: Bool
+ }
+
+defaultConfig :: CHADConfig
+defaultConfig = CHADConfig
+ { chcLetArrayAccum = False
+ , chcCaseArrayAccum = False
+ }