Today I achieved something I long lusted to acheive, I made the step from fix to loop.

Basically by going from the applicative order Y combinator:

(define (y f)

((lambda (ff)

(lambda (xx)

(f (ff ff) xx)))

(lambda (ff)

(lambda (xx)

(f (ff ff) xx)))))

(define (fak f n)

(if (= 0 n)

1

(* (f (- n 1)) n)))

((y fak) 5)

to writing the same in lazy haskell:

y f = f $ y f

fak r 0 = 1

fak r n = n * r (n - 1)

-- ghci> y fak 5 ----> 120

someone told me that

fix = y

and that fix and loop are closely related.

I found an aspiring blogpost and thought it would be fun to

do the fibonacci recursion instead of the simple factorial.

That resulted in:

data SF a b = SF {runSF :: [a] -> [b]}

instance Arrow SF where

arr f = SF (map f)

(SF f) >>> (SF g) = SF (f >>> g)

first (SF f) = SF $ unzip >>> (first f) >>> zip'

instance ArrowLoop SF where

loop (SF f) = SF (\ins ->

let (outs, rs) = (zip' >>>…

Basically by going from the applicative order Y combinator:

(define (y f)

((lambda (ff)

(lambda (xx)

(f (ff ff) xx)))

(lambda (ff)

(lambda (xx)

(f (ff ff) xx)))))

(define (fak f n)

(if (= 0 n)

1

(* (f (- n 1)) n)))

((y fak) 5)

to writing the same in lazy haskell:

y f = f $ y f

fak r 0 = 1

fak r n = n * r (n - 1)

-- ghci> y fak 5 ----> 120

someone told me that

fix = y

and that fix and loop are closely related.

I found an aspiring blogpost and thought it would be fun to

do the fibonacci recursion instead of the simple factorial.

That resulted in:

data SF a b = SF {runSF :: [a] -> [b]}

instance Arrow SF where

arr f = SF (map f)

(SF f) >>> (SF g) = SF (f >>> g)

first (SF f) = SF $ unzip >>> (first f) >>> zip'

instance ArrowLoop SF where

loop (SF f) = SF (\ins ->

let (outs, rs) = (zip' >>>…