Thanks for the prompt reply. Some questions / comments below : On Wed, Sep 1, 2010 at 12:33 AM, Maciej Piechotka <uzytkown...@gmail.com> wrote:
> rSum2 :: ArrowCircuit a => a Int Int > rSum2 = proc x -> do > rec out <- delay 0 -< out + x > returnA -< out + x Wow, that was simple. I guess I never thought to do this because it evaluates (out + x) twice, but one can always write rSum3 :: ArrowCircuit a => a Int Int rSum3 = proc x -> do rec let next = out + x out <- delay 0 -< next returnA -< next I have a follow-up question which I'll ask in a new thread. >> 3) One can define fix in terms of trace and trace in terms of fix. >> >> trace f x = fst $ fix (\(m, z) -> f (x, z)) >> fix f = trace (\(x, y) -> (f y, f y)) undefined >> >> Does this mean we can translate arbitrary recursive functions into >> ArrowLoop equivalents? >> > > Yes. In fact fix is used on functional languages that do not support > recursion to have recursion (or so I heard) In which case my question is, why is the primitive for Arrows based on trace instead of fix? Best regards, Ben _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe