diff options
Diffstat (limited to 'src/Analysis')
| -rw-r--r-- | src/Analysis/Identity.hs | 18 | 
1 files changed, 7 insertions, 11 deletions
diff --git a/src/Analysis/Identity.hs b/src/Analysis/Identity.hs index b3a6664..6301dc1 100644 --- a/src/Analysis/Identity.hs +++ b/src/Analysis/Identity.hs @@ -261,21 +261,17 @@ idana env expr = case expr of      res <- VIPair <$> (VIArr <$> genId <*> pure sh) <*> (VIArr <$> genId <*> pure sh')      pure (res, EFold1InnerD1 res cm e1' e2' e3') -  EFold1InnerD2 _ cm ef ez eplus ebog ed -> do +  EFold1InnerD2 _ cm ef ebog ed -> do      let STArr _ tB = typeOf ebog -        t2 = typeOf ez +        STArr _ t2 = typeOf ed      xf1 <- genIds t2      xf2 <- genIds tB      (_, e1') <- idana (xf1 `SCons` xf2 `SCons` env) ef -    (_, e2') <- idana env ez -    xp1 <- genIds t2 -    xp2 <- genIds t2 -    (_, e3') <- idana (xp1 `SCons` xp2 `SCons` env) eplus -    (v4, e4') <- idana env ebog -    (_, e5') <- idana env ed -    let VIArr _ sh = v4 -    res <- VIPair <$> genIds t2 <*> (VIArr <$> genId <*> pure sh) -    pure (res, EFold1InnerD2 res cm e1' e2' e3' e4' e5') +    (v2, e2') <- idana env ebog +    (_, e3') <- idana env ed +    let VIArr _ sh@(_ :< sh') = v2 +    res <- VIPair <$> (VIArr <$> genId <*> pure sh') <*> (VIArr <$> genId <*> pure sh) +    pure (res, EFold1InnerD2 res cm e1' e2' e3')    EConst _ t val -> do      res <- VIScal <$> genId  | 
