loop
来自的说明Control.Arrow
:
循环运算符表示将输出值作为输入反馈的计算,尽管计算只发生一次。它是箭头符号中的 rec 值递归结构的基础。
它的源代码,以及它的实例化(->)
:
class Arrow a => ArrowLoop a where
loop :: a (b,d) (c,d) -> a b c
instance ArrowLoop (->) where
loop f b = let (c,d) = f (b,d) in c
这立即让我想起fix
了定点组合器:
fix :: (a -> a) -> a
fix f = let x = f x in x
所以我的问题是:
- 是否有可能实现那个特定的
loop
viafix
? - 它们的功能有何不同?