diff options
author | Tom Smeding <tom@tomsmeding.com> | 2024-11-26 23:05:30 +0100 |
---|---|---|
committer | Tom Smeding <tom@tomsmeding.com> | 2024-11-26 23:05:30 +0100 |
commit | ade38c607a8d0dc8dc1d701084ed88df2fa89df9 (patch) | |
tree | 2183d63164a27fe84bb00b6c1920fe6c2be1e0e8 /src/Interpreter/Rep.hs | |
parent | ae2b1b71a91d60d3bd1dfb21fce98c05c1a4fcbb (diff) |
Working argument accum mode (...)
The derivative of 'neural' in full accum mode is pretty atrocious now; I
think this is because when you have code like this:
\(a :: Arr 1 R) ->
let b = a
in let c = b
in sum d
then because the argument, as well as both let bindings, bind a value of
array type, each will introduce an accumulator, hence resulting in three
(!) nested `with` clauses that each just contribute their result back to
their parent. This is pointless, and we should fix this.
Diffstat (limited to 'src/Interpreter/Rep.hs')
-rw-r--r-- | src/Interpreter/Rep.hs | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/Interpreter/Rep.hs b/src/Interpreter/Rep.hs index 0007991..335ad1f 100644 --- a/src/Interpreter/Rep.hs +++ b/src/Interpreter/Rep.hs @@ -37,7 +37,7 @@ type family RepAcSparse t where -- Immutable, and does not necessarily have a zero. type family RepAcDense t where RepAcDense TNil = () - -- RepAcDense (TPair a b) = (RepAcSparse a, RepAcSparse b) + RepAcDense (TPair a b) = (RepAcSparse a, RepAcSparse b) RepAcDense (TEither a b) = Either (RepAcSparse a) (RepAcSparse b) -- RepAcDense (TMaybe t) = RepAcSparse (TMaybe t) -- ^ This can be optimised to TMaybe (RepAcSparse t), but that makes accumAddDense very hard to write. And in any case, we don't need it because D2 will not produce Maybe of Maybe. -- RepAcDense (TArr n t) = Array n (RepAcSparse t) |