Skip to content

Commit 6455473

Browse files
committed
cleaned binder generation in term graph
1 parent 0c48891 commit 6455473

File tree

1 file changed

+37
-18
lines changed

1 file changed

+37
-18
lines changed

src/TermGraph.hs

+37-18
Original file line numberDiff line numberDiff line change
@@ -179,50 +179,65 @@ type TDict a = Map a Term
179179
type TransM a = StateT (TDict a) ORefM
180180
type TransT a = StateT (TDict a)
181181

182+
{-
182183
addPredefs :: MonadTG m => TDict A.Expr -> m (TDict A.Expr)
183184
addPredefs dict = do
184185
ty <- predefType
185186
return $ Map.insert A.Typ ty dict
186187
188+
187189
trans :: (Signature Term sig, MonadReader sig m, MonadTG m) =>
188190
Env -> A.Expr -> m Term
189191
trans rho e = -- trace ("translating " ++ show e) $ do
190192
evalStateT (transT e) =<< addPredefs
191193
(Map.mapKeysMonotonic (A.Ident . A.Var) rho)
194+
-}
195+
196+
addPredefs :: MonadTG m => TDict BTm -> m (TDict BTm)
197+
addPredefs dict = do
198+
ty <- predefType
199+
return $ Map.insert (BSort Type) ty dict
200+
201+
trans :: (Signature Term sig, MonadReader sig m, MonadTG m) =>
202+
Env -> A.Expr -> m Term
203+
trans rho e = -- trace ("translating " ++ show e) $ do
204+
evalStateT (transB (toLocallyNameless e)) =<< addPredefs
205+
(Map.mapKeysMonotonic BVar rho)
206+
192207

193-
{-
194208
-- | From locally nameless to Term.
195209
transB :: (Signature Term sig, MonadReader sig m, MonadTG m) =>
196210
BTm -> TransT BTm m Term
197211
transB = transG transB'
198212

199213
transB' :: (Signature Term sig, MonadReader sig m, MonadTG m) =>
200-
BTm -> TransT BTm m Term'
214+
BTm -> TransT BTm m (Either Term Term')
201215
transB' e = do
202216
let (f, sp) = appView e
203217
if null sp then
204218
case f of
205-
B (DBIndex
206-
BCon x -> con x . symbType . sigLookup' (A.uid x) <$> ask
219+
B (DBIndex i n) -> Left <$> transB (BVar n)
220+
BCon x -> Right <$> (con x . symbType . sigLookup' (A.uid x) <$> ask)
207221
BDef x -> do
208222
SigDef t v <- sigLookup' (A.uid x) <$> ask
209-
return $ def x t v
223+
Right <$> (return $ def x t v)
210224
BVar n -> -- free variable
211225
-- fail ("transB': unbound variable " ++ A.suggestion n)
212226
-- trace ("transB': unbound variable " ++ A.suggestion n)
213-
return $ Var n -- only for binding in Lam and Pi
214-
-- A.Typ -> predefType -- impossible case
215-
BLam n e -> Abs <$> transB (A.Ident $ A.Var n) <*> transB e
216-
BConstLam e -> K <$> transB e
217-
BPi a b -> Fun <$> transB a <*> transB b
227+
Right <$> (return $ Var n) -- only for binding in Lam and Pi
228+
BLam n e -> do
229+
x <- transAddBind BVar n
230+
Right . Abs x <$> transB e
231+
BConstLam e -> Right . K <$> transB e
232+
BPi a b -> Right <$> (Fun <$> transB a <*> transB b)
218233
else do
219234
r <- transB f
220-
App r <$> (mapM transB sp)
221-
-}
235+
Right . App r <$> (mapM transB sp)
236+
222237

223238
-- | Generic to Term translator.
224239
transG :: (Signature Term sig, MonadReader sig m, MonadTG m, Ord a, Show a) =>
225-
(a -> TransT a m Term') -> a -> TransT a m Term
240+
(a -> TransT a m (Either Term Term')) -> a -> TransT a m Term
226241
transG transT' e = do
227242
dict <- get
228243
case Map.lookup e dict of -- TODO compare upto alpha!
@@ -231,10 +246,14 @@ transG transT' e = do
231246
traceM $ return ("==> found translation for " ++ show e)
232247
return r
233248
Nothing -> do
234-
r <- newORef =<< transT' e
235-
-- traceM $ return ("adding translation for " ++ show e)
236-
put $ Map.insert e r dict
237-
return r
249+
rt <- transT' e
250+
case rt of
251+
Left r -> return r
252+
Right t -> do
253+
r <- newORef t
254+
-- traceM $ return ("adding translation for " ++ show e)
255+
put $ Map.insert e r dict
256+
return r
238257

239258
transAddBind :: (Signature Term sig, MonadReader sig m, MonadTG m, Ord a) =>
240259
(A.Name -> a) -> A.Name -> TransT a m Term
@@ -266,7 +285,7 @@ def x t v = Def x t v []
266285

267286
transT :: (Signature Term sig, MonadReader sig m, MonadTG m) =>
268287
A.Expr -> TransT A.Expr m Term
269-
transT = transG transT'
288+
transT = transG (Right <.> transT')
270289

271290
transT' :: (Signature Term sig, MonadReader sig m, MonadTG m) =>
272291
A.Expr -> TransT A.Expr m Term'

0 commit comments

Comments
 (0)