在这个问题下,leftarounabout留下了一个非常清楚的解释,为什么我们实际上考虑ArrowApply和Monad等价。
这个想法是在往返期间不丢失任何信息:
arrAsFunction :: Arrow k => k x y -> (x -> k () y)
arrAsFunction ? x = ? <<< arr (const x)
retrieveArrowFromFunction :: ? k x y .
ArrowApply k => (x -> k () y) -> k x y
retrieveArrowFromFunction f = arr f' >>> app
where f' :: x -> (k () y, ())
f' x = (f x, ())
Run Code Online (Sandbox Code Playgroud)
我(可能)明白,为什么我们开始谈论(x …