summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Smeding <t.j.smeding@uu.nl>2025-03-09 22:08:34 +0100
committerTom Smeding <t.j.smeding@uu.nl>2025-03-09 22:08:34 +0100
commit0527b33280fd8e59bfc0c7b2f031cd5acf4b18e2 (patch)
treeca8abf528419a0919000e2e0bd30fb3b8d2bdf6b
parentc3b4f56760547940256afea8e692681dbbe21857 (diff)
Just allow non-array accumulator types
Not sure why I didn't allow this previously
-rw-r--r--src/CHAD.hs21
1 files changed, 4 insertions, 17 deletions
diff --git a/src/CHAD.hs b/src/CHAD.hs
index 3f76922..4675434 100644
--- a/src/CHAD.hs
+++ b/src/CHAD.hs
@@ -425,10 +425,10 @@ accumPromote pdty (descr `DPush` (t :: STy t, sto)) k =
(SENo prosub)
wf
- -- Arrays with "merge" storage are promoted to an accumulator in envPro
- STArr (arrn :: SNat arrn) (arrt :: STy arrt) ->
+ -- Values with "merge" storage are promoted to an accumulator in envPro
+ _ ->
k (storepl `DPush` (t, SAccum))
- (STArr arrn arrt `SCons` envpro)
+ (t `SCons` envpro)
(SEYes prosub)
(\(shbinds :: SList _ shbinds) ->
let shbindsC = slistMap (\_ -> Const ()) shbinds
@@ -441,13 +441,9 @@ accumPromote pdty (descr `DPush` (t :: STy t, sto)) k =
-- goal: | ARE EQUAL ||
-- D2 t : Append shbinds (TAccum n t3 : D2AcE (Select envPro stoRepl "accum")) :> TAccum n t3 : Append envPro (D2 t : Append shbinds (D2AcE (Select envPro sto1 "accum")))
WCopy (wf shbinds)
- .> WPick @(TAccum (D2 (TArr arrn arrt))) @(D2 dt : shbinds) (Const () `SCons` shbindsC)
+ .> WPick @(TAccum (D2 t)) @(D2 dt : shbinds) (Const () `SCons` shbindsC)
(WId @(D2AcE (Select env1 stoRepl "accum"))))
- -- "merge" values must be an array or fully discrete, so reject everything else. (TODO: generalise this)
- _ ->
- error $ "Closure variable of 'build'-like thing contains a non-array non-discrete SMerge value: " ++ show t
-
-- Discrete values are left as-is, nothing to do
SDiscr ->
k (storepl `DPush` (t, SDiscr))
@@ -470,15 +466,6 @@ accumPromote pdty (descr `DPush` (t :: STy t, sto)) k =
STBool -> True
STAccum{} -> False
- -- containsTArr :: STy t' -> Bool
- -- containsTArr = \case
- -- STNil -> False
- -- STPair a b -> containsTArr a || containsTArr b
- -- STEither a b -> containsTArr a || containsTArr b
- -- STArr{} -> True
- -- STScal{} -> False
- -- STAccum{} -> error "An accumulator in merge storage?"
-
---------------------------- RETURN TRIPLE FROM CHAD ---------------------------