@EricRogstad - As far as I know the puzzle doesn't have anything to do with initial F-algebras. I think the type for a list algebra should just be `[a] -> a`. There's no need to take any fixedpoints.
Let me keep going with (c). In order to show the two operations are inverses, we need to show:
1. `alg = foldr (\x y -> alg [x,y]) (alg )` (ie, turning an list algebra into a monoid and converting it back gets us the original list algebra)
2. Two parts:
a. `(<>) = \ x y -> foldr (<>) mempty [x,y]`
b. `mempty = foldr (<>) mempty `
So (1) is annoying but (2) is super easy.
2a. Showing `(<>) = \x y -> foldr (<>) mempty [x,y]` is the same as showing `x <> y = foldr (<>) mempty [x,y]`. But we have:
foldr (<>) mempty [x,y]
= x <> y <> mempty
= x <> y
2b. In one step of evaluation we have `foldr (<>) mempty  = mempty`, so we're done.
Showing (1) requires more work, and we may need to lean on associativity/unitality...