-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Labels
Description
Непонятно, зачем рекурсия в функции:
renameVarsInExpr :: Expr -> Infer Expr
renameVarsInExpr x = flip cataM x $ \case
ExprTypeF tp -> ExprType <$> renameVars vars tp
x -> return $ embed x
where
vars = flip cata x $ \case
ExprTypeF tp -> setToList $ ftv tp
x -> ffold xoczor/src/Oczor/Infer/State.hs
Line 68 in 1b36249
| renameVarsInExpr :: Expr -> Infer Expr |
Функцию почти не трогали, разве что Fix/unfix заменили на embed/project. Однако она на первый взгляд не имеет смысла - алгоритму W такой обход не требуется.
Замена на более логичный вариант не приводит к падению тестов.
renameVarsInExpr :: Expr -> Infer Expr
renameVarsInExpr (ExprType tp) = ExprType <$> renameVars vars tp where
vars = setToList $ ftv tp
renameVarsInExpr x = return xКак понять задумку исходного рекурсивного обхода? Или придумать тест кейс чтобы второй вариант упал?