@@ -626,31 +626,14 @@ buildAbs hint binding cont = do
626626 return $ Abs b body
627627{-# INLINE buildAbs #-}
628628
629- varsAsBinderNest :: (EnvReader m , IRRep r ) => [AtomVar r n ] -> m n (EmptyAbs (Nest (Binder r )) n )
630- varsAsBinderNest [] = return $ EmptyAbs Empty
631- varsAsBinderNest (v: vs) = do
632- rest <- varsAsBinderNest vs
633- ty <- return $ getType v
634- let AtomVar v' _ = v
635- Abs b (Abs bs UnitE ) <- return $ abstractFreeVar v' rest
636- return $ EmptyAbs (Nest (b:> ty) bs)
637-
638629typesFromNonDepBinderNest
639630 :: (EnvReader m , Fallible1 m , IRRep r )
640631 => Nest (Binder r ) n l -> m n [Type r n ]
641632typesFromNonDepBinderNest Empty = return []
642- typesFromNonDepBinderNest (Nest (b :> ty) rest) = do
643- Abs rest' UnitE <- return $ ignoreHoistFailure $ hoist b ( Abs rest UnitE )
633+ typesFromNonDepBinderNest (Nest b rest) = do
634+ Abs rest' UnitE <- return $ assumeConst $ Abs ( UnaryNest b) $ Abs rest UnitE
644635 tys <- typesFromNonDepBinderNest rest'
645- return $ ty : tys
646-
647- singletonBinderNest
648- :: (EnvReader m , IRRep r )
649- => NameHint -> ann n
650- -> m n (EmptyAbs (Nest (BinderP (AtomNameC r ) ann )) n )
651- singletonBinderNest hint ann = do
652- Abs b _ <- return $ newName hint
653- return $ EmptyAbs (Nest (b:> ann) Empty )
636+ return $ binderType b : tys
654637
655638buildUnaryLamExpr
656639 :: (ScopableBuilder r m )
@@ -1260,10 +1243,10 @@ isJustE x = liftEmitBuilder $
12601243-- Monoid a -> (n=>a) -> a
12611244reduceE :: (Emits n , Builder r m ) => BaseMonoid r n -> Atom r n -> m n (Atom r n )
12621245reduceE monoid xs = liftEmitBuilder do
1263- TabTy d (n :> ty) a <- return $ getType xs
1264- a' <- return $ ignoreHoistFailure $ hoist n a
1265- getSnd =<< emitRunWriter noHint a' monoid \ _ ref ->
1266- buildFor noHint Fwd (sink $ IxType ty d ) \ i -> do
1246+ TabPi tabPi <- return $ getType xs
1247+ let a = assumeConst tabPi
1248+ getSnd =<< emitRunWriter noHint a monoid \ _ ref ->
1249+ buildFor noHint Fwd (sink $ tabIxType tabPi ) \ i -> do
12671250 x <- tabApp (sink xs) (Var i)
12681251 emitExpr $ PrimOp $ RefOp (sink $ Var ref) $ MExtend (sink monoid) x
12691252
@@ -1276,11 +1259,10 @@ andMonoid = liftM (BaseMonoid TrueAtom) $ liftBuilder $
12761259mapE :: (Emits n , ScopableBuilder r m )
12771260 => (forall l . (Emits l , DExt n l ) => Atom r l -> m l (Atom r l ))
12781261 -> Atom r n -> m n (Atom r n )
1279- mapE f xs = do
1280- TabTy d (n:> ty) _ <- return $ getType xs
1281- buildFor (getNameHint n) Fwd (IxType ty d) \ i -> do
1282- x <- tabApp (sink xs) (Var i)
1283- f x
1262+ mapE cont xs = do
1263+ TabPi tabPi <- return $ getType xs
1264+ buildFor (getNameHint tabPi) Fwd (tabIxType tabPi) \ i -> do
1265+ tabApp (sink xs) (Var i) >>= cont
12841266
12851267-- (n:Type) ?-> (a:Type) ?-> (xs : n=>Maybe a) : Maybe (n => a) =
12861268catMaybesE :: (Emits n , Builder r m ) => Atom r n -> m n (Atom r n )
0 commit comments