问题描述
如果我们有一个函子固定点:
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 (将#修改为@)