0

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

then 该函数out : Fix f -> f (Fix f)使用起来不安全,因为 if fis not a Functorthen 您可以轻松编写无限循环(例如 with f x = x -> x)。

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

对于 Mendler 式的超态,我正在考虑以下类型:

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

我的预感是答案是否定的,因为我们只能写outiff实际上是一个函子:

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

所以这意味着它mpara可以安全地与任何f. 我对么?

4

0 回答 0