你能用 Mendler 风格的paramorphism 写一个无限循环吗?

问题描述

如果我们有一个函子固定点: Fix f = Con (f (Fix f))

那么函数 out : Fix f -> f (Fix f) 使用起来并不安全,因为如果 f 不是 Functor,那么您可以轻松编写无限循环(例如使用 f x = x -> x) .

我的问题:如果我们只能用 Mendler 风格的拟态消除 Fix(即使 f 不是 Functor),是否可以编写一个无限循环?

对于 Mendler 风格的拟态,我想到了以下类型:

mpara : (forall r. (r -> Fix f) -> (r -> t) -> f r -> t) -> Fix f -> t

我的直觉是答案是否定的,因为如果 out 实际上是一个函子,我们只能写 f

out : Functor f => Fix f -> f (Fix f)
out = mpara (\expose rec y. fmap expose y)

这意味着 mpara 可以安全地与任何 f 一起使用。我说的对吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)